c# – ASP.NET MVC POST中的Modelbinding IEnumerable?

前端之家收集整理的这篇文章主要介绍了c# – ASP.NET MVC POST中的Modelbinding IEnumerable?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
将模型绑定IEnumerable类型与MVC POST有任何问题吗?

我的模型中的一些属性没有被绑定到一个动作的帖子.似乎模型上的属性就像字符串一样,但我的IEnumerable是什么没有绑定.

以下是我的代码片段:

<%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.Test) %>
    <% for (int i = 0; i < Model.ResponseInfo.SubsetInfo.BandAvailabilities.Count(); i++)
    {%>
        <%: Html.TextBoxFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities.ToArray()[i].BandName) %>
  <% } %>

这里是模型中的这些属性

public IEnumerable<BandAvailabilityInfo> BandAvailabilities { get; set; }
public string Test { get; set; }

视图工作正常,并输出文本框列表中的预期值.但是被触发的帖子Action只能将Test字符串识别为属性.模型状态也不包含我的IEnumerable数据.

解决方法

模型绑定取决于HTML的生成方式.对于特定场景绑定正确html应该看起来像
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[0].BandName"/>
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[1].BandName"/>
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[2].BandName"/>
.
.
<input type="text" name = "ResponseInfo.SubsetInfo.BandAvailabilities[n].BandName"/>

我没有尝试过,但我几乎可以肯定,调用ToArray方法循环是保持系统为嵌套输入生成正确的名称.有几件事情你可以做,以补救这一点
首先,在你看来模型的变化

public IEnumerable<BandAvailabilityInfo> BandAvailabilities { get; set; }

public IList<BandAvailabilityInfo> BandAvailabilities { get; set; }  //or Array

所以您不必在循环中调用ToArray方法,并为输入生成适当的名称.
其次,编辑一个编辑器模板,并将其放在Editor templates文件夹中,或者在当前控制器或共享文件夹的Editor模板文件夹中.使此视图接受BandAvailabilityInfo类型的模型,此视图的名称也应为BandAvailabilityInfo.那么在你的主视图中,你只需要替换整个循环

<%: Html.EditorFor(m => m.ResponseInfo.SubsetInfo.BandAvailabilities%>

休息将由框架本身处理

原文链接:https://www.f2er.com/csharp/94491.html

猜你在找的C#相关文章