ASP.NET MVC одна форма, две кнопки - PullRequest
2 голосов
/ 12 августа 2010

У меня есть простая форма, основанная на модели под названием Visitor.Я хотел бы иметь кнопку поиска по одному из текстовых полей идентификатора, чтобы пользователь мог щелкнуть по кнопке и заполнить страницу информацией о посетителе: имя, фамилия и т. Д. В веб-формах я сделал бы что-то вроде этого:

page_load(){
    person = businessManager.FindPersonById(Convert.ToInt32(txtId.Text));
    txtFirstName.Text = person.FirstName;
    txtLastName.Text = person.LastName;
     ...
}

До кнопки поиска моя форма просмотра, называемая SignIn, работала просто отлично;отправил данные контроллеру и сделал свое дело:

    [HttpPost]
    public ActionResult SignIn(Visitor visitor) {
        if (ModelState.IsValid) {
            visitorRepoistory.Add(visitor);
            visitorRepoistory.Save();
            return RedirectToAction("/");
        } else {
            return View(new VisitorFormViewModel(visitor));
        }
    }

Но теперь, когда в форме просмотра есть кнопка поиска, я полностью потерян.Я не знаю, как подключить кнопку поиска к контроллеру, чтобы я мог: 1.) найти данные и 2.) вернуть их обратно в форму для заполнения полей.Какие шаги мне нужно предпринять для достижения этой цели?

Спасибо.

1 Ответ

2 голосов
/ 12 августа 2010

Этот вопрос многократно дублировался на SO

Несколько форм в ASP.NET MVC

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

Специфично для вашего случая:

View

<% Html.BeginForm("Search", "<ControllerName>"); %>
    Your search controls here
<% Html.EndForm(); %>

<% Html.BeginForm("SignIn", "<ControllerName>"); %>
    Your signin controls here
<% Html.EndForm(); %>

Контроллер

[HttpPost]
public ActionResult Search(FormCollection collection)
{
   Do your search and return a view
}

[HttpPost]
public ActionResult SignIn(Visitor visitor) 
{
    if (ModelState.IsValid) {
        visitorRepoistory.Add(visitor);
        visitorRepoistory.Save();
        return RedirectToAction("/");
    } else {
        return View(new VisitorFormViewModel(visitor));
    }
}
...