Asp.net mvc 2 ASP.Net MVC 2-模型绑定和字典<;int,int>;
在我的界面中,我有一个文本框列表,如下所示: 文本框的数量未知,因为每个文本框都与模板关联。 在我的页面中,目标是将一个数字与其中一些模板相关联 下面是一个示例HTML代码:Asp.net mvc 2 ASP.Net MVC 2-模型绑定和字典<;int,int>;,asp.net-mvc-2,idictionary,model-binding,Asp.net Mvc 2,Idictionary,Model Binding,在我的界面中,我有一个文本框列表,如下所示: 文本框的数量未知,因为每个文本框都与模板关联。 在我的页面中,目标是将一个数字与其中一些模板相关联 下面是一个示例HTML代码: <% // loop on the templates foreach(ITemplate template in templates) { // get the content from the input dictionary int val;
<% // loop on the templates
foreach(ITemplate template in templates)
{
// get the content from the input dictionary
int val;
content.TryGetValue(template.Id, out val);
// convert it as a string
string value = ((val > 0) ? val.ToString() : string.Empty);
// compute the element name/id (for dictionary binding)
string id = ??????????
string name = ??????????????
%>
<label for="<%= name %>"><%= template.Name %></label>
<input type="text" id="<%= id %>" name="<%= name %>" value="<%= value %>" />
<br />
<% }
%>
0)?val.ToString():string.Empty);
//计算元素名称/id(用于字典绑定)
字符串id=??????????
字符串名称=??????????????
%>
在我的控制器中,我希望得到一个IDictionary,其中第一个int是模板ID,另一个是用户给定的计数
以下是我想要的:
public ActionResult Save(int? id, Dictionary<int, int> countByTemplate)
公共操作结果保存(int?id,字典countByTemplate)
我试了很多东西,但都没用。我试图阅读资料来源,但这是一个迷宫,我得到了一个头像,试图获得有关模型绑定的信息
问题:
- 关于modelbinding是如何工作的,有好的资源吗? 我想要一些详尽的东西,我厌倦了84093043个博客,这些博客讨论了一个特定的例子
- 我如何构建我的HTML,使用它来获取IDictionary(甚至在控制器的操作中获取IDictionary)
非常感谢您的帮助有关如何编写用于绑定到数组、词典和其他集合的输入元素的信息,请访问。好的……多亏了Levi,我才能够找到解决方案。 不是干净的那个,但它能用 HTML应按以下方式编写:
0)?val.ToString():string.Empty);
//计算元素名(用于字典绑定)
string id=“cbts_{0}”.FormatMe(template.id);
string dictKey=“cbts[{0}].Key”.FormatMe(计数器);
string dictValue=“cbts[{0}].Value”.FormatMe(计数器++);
%>
我必须添加一个隐藏字段来存储值。
我引入了一个“假”计数器,只是为了按照ASP.NETMVC的要求循环字典。
因此,当文本框为空时,我得到了一个充满我的值和“0”的字典
出现了另一个问题:ModelState
被认为无效,因为“需要一个值”。我不希望需要我的值,但是查看modelbinder代码,我没有找到一种方法告诉binder不需要值
因此,我在控制器中欺骗了ModelState
,消除了所有错误,如下所示:
公共操作结果保存(int?id,字典cbts)
{
//清除modelstate中的所有错误
foreach(this.ModelState.Values中的var值)
value.Errors.Clear();
嗯……我有效地找到了一个解决方案,但HTML现在有点难看,而且违反直觉(使用索引在非索引集合上循环??)。
每次我都要耍花招,我会用这种绑定让它正常工作
因此,我现在将打开一个新的职位,使字典活页夹更好。
这是:
编辑-多亏了Pavel Chuchuva,才有了更干净的解决方案
在控制器代码中,使用可为null的int作为字典的值。
要添加的代码多一点,但要干净得多
公共操作结果保存(int?id,字典cbts)
{
//这是我们的最后一本字典
字典cbtsFinal=新字典();
//具有可空值的双余弦上的循环
foreach(cbts.Keys中的var键)
{
//如果我们有价值
if(cbts[key].HasValue)
//然后把它放在最后一本字典里
cbtsFinal.Add(key,cbts[key].Value);
}
尝试
公共操作结果保存(int?id,字典cbts)