我有一个MVC应用程序,其中包含一组字段,用于为个人添加联系人详细信息(电子邮件,电话,传真,AIM等)。最初,我提供了输入类型的下拉列表和相应数据的输入字段,以及添加另一组字段的链接。
完成后,我有一个提交按钮来提交表单。
我很高兴使用添加链接和javascript添加更多字段的方法,但我无法解决如何在没有javascript的情况下执行此操作。
对于解决这个问题的最佳方向,我将不胜感激。我对保持添加链接并不是特别珍贵,它可能是一个按钮,但我宁愿在地址栏中更改网址。
谢谢,理查德
答案 0 :(得分:1)
正如Matthew所说,如果您不想更改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部分
现在,因为您有一个已知的fieldcount,所以您可以循环显示视图上的字段:
<form action="/myController/SaveData/" method="post">
...
<% for(i=0; i<int.TryParse(ViewData["fieldCount"]); i++) { %>
<input type="text" name="customData" /><br />
<% } %>
...
</form>
请注意,这两种表单有不同的操作 - 这样,您就不必担心单击一个提交按钮会意外发布错误的数据。
答案 1 :(得分:0)
使用jQuery,可以非常轻松地将html元素直接插入到DOM中,而无需回发。它使用的是javascript,你在标题中说的是你不想要的,但你确实说问题还可以,所以请告诉我你是否还需要别的东西。
所以你真正需要弄清楚的是一种在发送到服务器时处理数据的方法......
......这也不一定太难。如果我没有弄错(但我可能会),input
具有相同name
的元素的值将作为值数组处理。因此,如果您使用通用名称插入新元素,则应该能够通过迭代服务器上的数组来检索所有数据。
这个html
<input type="text" name="customData" />
<input type="text" name="customData" />
将在服务器上发布您可以使用此C#代码获取的数据:
public ActionResult DoCoolStuff(FormCollection postedValues) {
foreach(string data in postedValues.customData) {
// This is where the cool stuff goes
}
Return RedirectToAction("Index");
}
答案 2 :(得分:0)
这基本上是答案的客户端。如果你必须在没有JavaScript且不更改URL的情况下这样做,那基本上就会留下一个POST。
<form action="" method="post">
<input name="field1"/>
<input name="field2"/>
...
<input name="add_field_submit" type="submit" value="Add Field"/>
...
<input name="done_submit" type="submit" value="Submit"/>
在服务器上,您可以检测是否单击了添加字段(存在add_field_submit)或提交(存在done_submit)。如果他们单击“添加字段”,则添加字段并提供视图。否则就完成了。