Как сказал Мэтью, если вы не хотите менять URL-адрес и не хотите использовать javascript, лучшим вариантом является запрос POST к серверу. Однако в ASP.Net MVC это можно сделать довольно аккуратно. Вам нужно будет изменить View
с двумя добавлениями и добавить новый ActionMethod
.
Вид, часть 1
Добавьте дополнительную форму к вашему представлению (это недопустимо в WebForms, поэтому может показаться немного странным, но в MVC это прекрасно).
<form action="/myController/myView/<%= (ViewData["fieldCount"]+ 1) %>">
<input type="submit" value="Add custom field" />
</form>
Обратите внимание на переменную fieldCount
- ее следует передать из Controller
, как показано ниже:
Контроллер
Добавьте следующий ActionMethod
, чтобы перегрузить тот, который вам в данный момент требуется для отображения формы:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult myView(int id) {
ViewData["fieldCount"] = id;
Return View();
}
Я использовал имя переменной id
только для того, чтобы вам не пришлось добавлять другой маршрут.
Вид, часть 2
Теперь, когда у вас есть известный счетчик полей, вы можете просто зациклить поля в представлении:
<form action="/myController/SaveData/" method="post">
...
<% for(i=0; i<int.TryParse(ViewData["fieldCount"]); i++) { %>
<input type="text" name="customData" /><br />
<% } %>
...
</form>
Обратите внимание, что эти две формы выполняют разные действия - таким образом, вам никогда не придется беспокоиться о том, что нажатие одной кнопки отправки приведет к случайной публикации неверных данных.