2016-06-13 2 views
2

Я создаю небольшое веб-приложение для тестирования нового ASP.NET Core MVC. Я реализовал компонент View, который содержит форму входа, которую мне нужно вставлять в различные места в приложении. Моя форма в настоящее время помещает данные в обычный контроллер, который обрабатывает логин.Form Post from View Component

Теперь, учитывая, что пользователь предоставил неправильную регистрационную информацию, я хочу добавить сообщение об ошибке в состояние модели и отобразить ее под моей формой, например, обычной проверкой. Но дело в том, что компонент вида можно интегрировать во всевозможные места, как узнать, откуда появилась почта формы?

Я хочу, чтобы на том же сайте пользователь снова вводил свои учетные данные только с ошибками проверки. Есть ли способ узнать, откуда появился сообщение в форме? Или лучше есть стандартный способ обработки форм в виде компонентов представления в ASP.NET Core MVC?

ответ

2

Если вы унаследовали от ViewComponent, у вас есть доступ к объекту ViewContext, в котором перечислены все сведения о маршруте, включая действие и контроллер. Затем добавьте IUrlHelperFactory в свой ViewComponent (через конструктор, затем сохраните как личное поле) и заново создайте URL-адрес, получив IUrlHelper с завода (пропуская в ViewContext) и называя метод Action() на нем.

public class LoginViewComponent : ViewComponent { 
    public LoginViewComponent(IUrlHelperFactory factory) { 
     this.factory = factory; 
    } 
    private IUrlHelperFactory factory; 

    public void Invoke() { 
     IUrlHelper helper = factory.GetUrlHelper(ViewContext); 
     helper.Action(); // returns url to the current controller action 
    } 
} 
+0

Благодарим вас за это! IUrlHelperFactory был волшебным трюком, которого я не мог найти. – Peter