Lar*_*ard 7 asp.net asp.net-mvc asp.net-mvc-4
在我的视图模型中,我有一个对象列表.我迭代这些对象,并为每个对象创建控件.在下面的情况中,我想向人们展示每个对象的文本框和按钮.当用户单击该按钮时,会发布一个帖子,我可以将数据保存在我的控制器中.
在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>
}
}
Run Code Online (Sandbox Code Playgroud)
我的视图模型代码
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; }
}
Run Code Online (Sandbox Code Playgroud)
我的控制器代码
[HttpPost]
public ActionResult Mine(ProfileModel model, string newuser)
{
//
}
Run Code Online (Sandbox Code Playgroud)
怎么解决?
我想我必须扩展我的视图模型,以某种方式存储更改.但我真的看不出怎么样.
现在,ProfileModel中的所有属性在到达控制器时都为null.
有任何想法吗?
Tom*_*mmi 19
基本上问题是默认模型绑定器无法在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>
}
Run Code Online (Sandbox Code Playgroud)
我建议你使用一个调试工具来查看元素是否具有正确的name属性,在你的情况下它们看起来应该像Contributor [0] .Id,Contributor [0] .FirstName等.
您可以将PartialView用于Contributor对象.PartialView:
@model Contributor
using (Html.BeginForm("ContributorUpdate", "YourController"))
{
@Html.HiddenFor(model => Model.Id)
<div class="formrow">
@Html.ValidationSummary(true)
</div>
<h2>@Html.TextRaw("AuthorInfo", "Author")</h2>
<div class="formrow">
@Html.EditorFor(model => Model.FirstName)
<div class="formvalidation">
@Html.ValidationMessageFor(model => Model.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>
}
Run Code Online (Sandbox Code Playgroud)
查看将是:
@foreach (var contributor in Model.Contributor)
{
@{Html.RenderPartial("Conributor", contributor);}
}
Run Code Online (Sandbox Code Playgroud)
和控制器代码:
[HttpPost]
public ActionResult Mine(Conributor conributor, string newuser)
{
//
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17921 次 |
| 最近记录: |