asp.net – 对于每个循环都有控件并在MVC 4中提交表单(Html.BeginForm)

前端之家收集整理的这篇文章主要介绍了asp.net – 对于每个循环都有控件并在MVC 4中提交表单(Html.BeginForm)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的视图模型中,我有一个对象列表.我迭代这些对象,并为每个对象创建控件.在下面的情况中,我想向人们展示每个对象的文本框和按钮.当用户单击该按钮时,会发布一个帖子,我可以将数据保存在我的控制器中.

在UI中,用户可以更改他们想要的表单,然后单击“保存”.

我的问题是当模型发布到控制器时模型为空.

我的剃刀代码

using (Html.BeginForm())
        {
            foreach (var contributor in Model.Contributor)
            {

        @Html.HiddenFor(model => contributor.Id)

        <div class="formrow">
            @Html.ValidationSummary(true)
        </div>

        <h2>@Html.TextRaw("AuthorInfo","Author")</h2>
        <div class="formrow">

            @Html.EditorFor(model => contributor.FirstName)
            <div class="formvalidation">
                @Html.ValidationMessageFor(model => contributor.FirstName)
            </div>
        </div>


        <div class="formrow right">
            <input type="hidden" name="formsubmitted" value="true" />
            <input type="submit"  class="button" value="@Html.Text("ButtonText","Save")" />
        </div>
            }
        }@H_404_9@ 
 

我的视图模型代码

public class ProfileModel
{
    public string Message { get; set; }
    public List<PublisherModel> Publisher { get; set; }
    public List<ContributorModel> Contributor { get; set; }

    public ContributorModel NewContributor { get; set; }
}@H_404_9@ 
 

我的控制器代码

[HttpPost]
public ActionResult Mine(ProfileModel model,string newuser)
{
    //
}@H_404_9@ 
 

怎么解决

我想我必须扩展我的视图模型,以某种方式存储更改.但我真的看不出怎么样.

现在,ProfileModel中的所有属性在到达控制器时都为null.

有任何想法吗?

解决方法

基本上问题是默认模型绑定器无法在foreach循环中正确绑定集合项.换句话说,它错误地命名元素,这就是集合在参数中显示为null的原因.

我确信有各种不同的解决方法,帮助器和东西,但我不熟悉那些,所以我只是使用for循环而不是foreach,这样元素被正确命名.

试试这个:

@for (int i = 0; i < Model.Contributor.Count(); i++)
    {

        @Html.HiddenFor(model => Model.Contributor[i].Id)

        <div class="formrow">
            @Html.ValidationSummary(true)
        </div>

        <h2>@Html.TextRaw("AuthorInfo","Author")</h2>
        <div class="formrow">

            @Html.EditorFor(model => Model.Contributor[i].FirstName)
            <div class="formvalidation">
                @Html.ValidationMessageFor(model => Model.Contributor[i].FirstName)
            </div>
        </div>


        <div class="formrow right">
            <input type="hidden" name="formsubmitted" value="true" />
            <input type="submit"  class="button" value="@Html.Text("ButtonText","Save")" />
        </div>
    }@H_404_9@ 
 

我建议您使用调试工具来查看元素是否具有正确的name属性,在您的情况下,它们应该看起来像Contributor [0] .Id,Contributor [0] .FirstName等.

猜你在找的asp.Net相关文章