【问题标题】:How to dynamically generate controls in MVC?如何在MVC中动态生成控件?
【发布时间】:2016-01-24 04:43:26
【问题描述】:

在 asp.net 中,您可以使用 asp:Repeater 来动态生成控件。

例如:

<asp:Repeater runat="server" id="rpt">
   <ItemTemplate>
       <asp:Textbox runat="server"/>
   </ItemTemplate>
</asp:Repeater>

然后你可以在服务器端循环遍历项目:

foreach(var items in rpt.Items)
{
}

在 MVC 中,你可以这样做:

@foreach(var item in model)
{
   @Html.TextBoxFor(a=>item.searchCriteria);
}

但是有一个问题:

我想在用户点击添加更多文本框按钮时生成文本框:

如果我在 MVC 中使用 foreach,那么我将无法获取控制器上的用户输入,而且我没有要循环的模型。

最终所需的输出将是:

用户点击“添加更多文本框”按钮后,底部会追加一个新的文本框,用户点击搜索按钮后,文本框内的文本会生成一个查询字符串,类似这样:

查看:

 <input name="searchCriteria" type="text" class="form-control" />
 <input name="searchCriteria" type="text" class="form-control" />
 <input name="searchCriteria" type="text" class="form-control" />
 <input name="searchCriteria" type="text" class="form-control" />

控制器:

 public ActionResult Search()
        {
            string queryString = Request.RawUrl;
            //parse the querystring here
            return View(NumberOfVisitorsReport);
        }

而生成的查询字符串将是:

www.website.com/?searchCriteria=a&searchCriteria=b&searchCriteria=c

那么在 MVC 中有没有其他方法可以实现这一点?

编辑:

我看过一些关于“如何在 MVC 中动态生成控件”的帖子

例如

Control creation based on model value in MVC4

他正在根据数据库中的值生成控件,如果我将其实施到我的网站,控件将在每次回帖时失去价值。

【问题讨论】:

  • 您可以使用 JavaScript...当您想在客户端发生某些事情时,这通常是最好的方法。

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

您可能希望摆脱“回发”,转而使用 jQuery 或类似框架在浏览器中动态添加文本框。如果您仔细命名新文本框或将 JSON 对象的 AJAX 帖子提交,您可以从所有添加的控件中获取所有值。

【讨论】:

    【解决方案2】:

    你必须使用 jquery。

    这篇文章可以帮助解决问题。

    Dynamic Form in Asp.net MVC & jquery

    【讨论】:

      【解决方案3】:

      您将不得不在 ForEach 中使用 For 循环。然后使用index新建Textbox控件,这样当你提交表单时,新创建的文本框的索引就会被提交,如果你的模型的数据类型是,你甚至可以将它绑定到模型列表

      例子:

       @for (int i = 0; i < Model.Contributor.Count(); i++)
          {
      
              @Html.HiddenFor(model => Model.Contributor[i].Id)
      
        }
      

      现在您知道 "i" 的值/索引,用它来填充新控件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-14
        • 2017-02-13
        • 2011-12-29
        • 2013-03-01
        • 2013-09-04
        • 1970-01-01
        相关资源
        最近更新 更多