Как поддержать несколько форм, которые нацеливаются на то же самое действие на одной и той же странице?
-
29-09-2020 - |
Вопрос
Я хочу иметь две отдельные формы на одной странице создания и одно действие в контроллере для каждой формы.
В поле зрения:
<% using (Html.BeginForm()) { %>
// Contents of the first (EditorFor(Model.Product) form.
<input type="submit" />
<% } %>
<% using (Html.BeginForm()) { %>
// Contents of the second (generic input) form.
<input type="submit" />
<% } %>
.
в контроллере:
// Empty for GET request
public ActionResult Create() {
return View(new ProductViewModel("", new Product()));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Product product) {
return View(new ProductViewModel("", product));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string genericInput) {
if (/* problems with the generic input */) {
ModelState.AddModelError("genericInput", "you donkey");
}
if (ModelState.IsValid) {
// Create a product from the generic input and add to database
return RedirectToAction("Details", "Products", new { id = product.ID });
}
return View(new ProductViewModel(genericInput, new Product()));
}
.
Приводит к результатам "The current request for action 'MyMethod' on controller type 'MyController' is ambiguous between the following action methods"
- ошибка или неправильное создание действий вызывается.
Решения?
- .
- объединить эти два пост Создать действия в один публичный генеракодицетагкод
- Название Один из сообщений создает действия по-разному и добавить новое имя на соответствующий
ActionResult Create(Product product, string genericInput);
Я понятия не имею, что в этих условиях.Как бы вы решили это?
Решение
На самом деле, я считаю, что вы можете сделать это, если вы более конкретны с вашим вызовом Beginform ().
Using(Html.BeginForm<ControllerName>(c => c.Create((Product)null)) { }
Using(Html.BeginForm<ControllerName>(c => c.Create((string)null)) { }
. Другие советы
Вы не можете иметь два действия с тем же именем и глаголом, которые отличаются только с типовыми аргументами.ИМХО название ваших двух двух действий по-разному - это хорошая идея, предполагая, что они выполняют разные задачи и принимают разные входы.