ASP.Net MVC - 使用添加链接(不带javascript)将字段添加到创建表单

时间:2009-05-22 13:31:28

标签: asp.net-mvc forms

我有一个MVC应用程序,其中包含一组字段,用于为个人添加联系人详细信息(电子邮件,电话,传真,AIM等)。最初,我提供了输入类型的下拉列表和相应数据的输入字段,以及添加另一组字段的链接。

完成后,我有一个提交按钮来提交表单。

我很高兴使用添加链接和javascript添加更多字段的方法,但我无法解决如何在没有javascript的情况下执行此操作。

对于解决这个问题的最佳方向,我将不胜感激。我对保持添加链接并不是特别珍贵,它可能是一个按钮,但我宁愿在地址栏中更改网址。

谢谢,理查德

3 个答案:

答案 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)。如果他们单击“添加字段”,则添加字段并提供视图。否则就完成了。