<% foreach (var item in Model.Items) { %><%: HTML.Label(item.Key,item.Key)%><%: HTML.TextBox(item.Key,item.Value)%><% } %>
下面是我处理POST *** 作的action方法:
[httpPost]public virtual ActionResult MyMethod(Dictionary<string,double?> items){ // do stuff........ return VIEw();}
当我在文本框中输入一些值并点击提交按钮时,POST *** 作方法没有收到任何项目?我究竟做错了什么?
解决方法 我建议你阅读 this blog post关于如何命名你的输入字段,以便你可以绑定到字典.因此,您需要为密钥添加一个额外的隐藏字段:<input type="hIDden" name="items[0].Key" value="key1" /><input type="text" name="items[0].Value" value="15.4" /><input type="hIDden" name="items[1].Key" value="key2" /><input type="text" name="items[1].Value" value="17.8" />
可以通过以下方式生成:
<% var index = 0; %><% foreach (var key in Model.Keys) { %> <%: HTML.HIDden("items[" + index + "].Key",key) %> <%: HTML.TextBox("items[" + index +"].Value",Model[key]) %> <% index++; %><% } %>
这就是说,我个人建议你不要在你的观点中使用词典.它们很难看,为了为模型绑定器生成专有名称,您需要编写丑陋的代码.我会使用视图模型.这是一个例子:
模型:
public class Myviewmodel{ public string Key { get; set; } public double? Value { get; set; }}
控制器:
public class HomeController : Controller{ public ActionResult Index() { var model = new[] { new Myviewmodel { Key = "key1",Value = 15.4 },new Myviewmodel { Key = "key2",Value = 16.1 },new Myviewmodel { Key = "key3",Value = 20 },}; return VIEw(model); } [httpPost] public ActionResult Index(IEnumerable<Myviewmodel> items) { return VIEw(items); }}
查看(〜/ VIEws / Home / Index.aspx):
<% using (HTML.BeginForm()) { %> <%: HTML.EditorForModel() %> <input type="submit" value="OK" /><% } %>
编辑模板(〜/ VIEws / Home / EditorTemplates / Myviewmodel.ascx):
<%@ Control Language="C#" @R_404_5107@s="System.Web.Mvc.VIEwUserControl<Models.Myviewmodel>" %><%: HTML.HIDdenFor(x => x.Key) %><%: HTML.TextBoxFor(x => x.Value) %>总结
以上是内存溢出为你收集整理的c# – 模型绑定字典全部内容,希望文章能够帮你解决c# – 模型绑定字典所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)