ASP.NET MVC& JQuery动态表单内容

时间:2009-01-21 00:10:59

标签: c# jquery asp.net-mvc

我想用JQuery动态地将字段添加到ASP.NET MVC表单。

示例:

<script language="javascript" type="text/javascript">
    var widgets;

    $(document).ready(function() {
        widgets = 0;
        AddWidget();
    });

    function AddWidget() {
        $('#widgets').append("<li><input type='text' name='widget" + widgets + "'/></li>");
        widgets++;
    }
</script>

<ul id="widgets">
</ul>

这有效,但我打算手动迭代控制器中的表单值:

[AcceptVerbs("Post")]
public ActionResult AddWidget(FormCollection form)
{
    foreach (string s in form)
    {
        string t = form[s];
    }

    return RedirectToAction("ActionName");
}

但是当我将用户发送回Controller中的Get Action时,我发现它必须使用输入的值设置FormData,然后使用&lt;%scripting迭代添加小部件。

在当前版本中有什么最好的方法(5我相信)?

4 个答案:

答案 0 :(得分:4)

我的解决方案可能是这样的(伪代码):

<script language="javascript" type="text/javascript">
    var widgets;

    $(document).ready(function() {
        widgets = 0;
        <% for each value in ViewData("WidgetValues") %>
             AddWidget(<%= value %>);
        <% next %>
    });

    function AddWidget( value ) {
        $('#widgets').append("<li><input type='text' name='widget" + widgets + 
                             "'>" + value + "</input></li>");
        widgets++;
    }
</script>

<ul id="widgets">
</ul>

在控制器中:

[AcceptVerbs("Post")]
public ActionResult AddWidget(FormCollection form)
{
    dim collValues as new Collection;
    foreach (string s in form)
    {
        string t = form[s];
        collValues.add( t )
    }
    ViewData("WidgetValues") = collValues;
    return RedirectToAction("ActionName");
}

您可以稍后详细说明 (抱歉将VB与C#混合,我是一个VB人)

答案 1 :(得分:0)

我可能会忽略这一点,但是,您是否需要通过表单操作将数据实际发布回控制器?为什么不使用jquery进行ajax调用将数据发布到控制器......或者更好的是Web服务?发送数据异步,无需使用发送的数据值重建视图。

如果正在使用这些值并且从不再使用它,这样可以正常工作,但是,如果您计划保留数据并通过视图显示它,那么您的模型应该真正支持数据结构。可能是模型上的Dictionary<string, string>

答案 2 :(得分:0)

我不是ASP.net开发人员,但我从PHP知道你可以使用数组作为输入字段的名称

例如:

<input type="text" name="widgets[]" />
<input type="text" name="widgets[]" />

然后,您可以遍历post变量小部件,就像它是一个值数组一样。

不要乱用动态命名变量等。

答案 3 :(得分:0)

据我所知,问题是保留小部件中的已发布值。 我想你可以在视图渲染过程中渲染那些你不会在服务器上填充的小部件。