我在视图中有2个模型。我希望能够在通过for循环时将模型的一个属性的值设置为另一个模型属性。示例代码澄清:
@model xxx.Models.modelbundle
@using (Html.BeginForm("Post", "Admin", FormMethod.Post))
{
for (int item = 0; Model.One.Count > item; item++)
{
<tr>
<td>
@Html.DisplayFor(modelItem => Model.One[item].ObjectId)
</td>
<td>
@Html.CheckBoxFor(modelItem => Model.Two[item].set)
</td>
@Model.Two[item].ObjectId = Model.One[item].ObjectId; // Here. How to set them?
</tr>
}
<div>
<input type="submit" id="button" value="Change Me" href="/Admin">
<div></div>
</div>
}
编辑:
ObjectId不会传递给Model.Two。例如
[HttpPost]
public ActionResult Post(modelbundle model)
{
List<Two> list = model.Two; // Model bundle contains a list. Eg. model.Two[0].ObjectId = null
...
}
Model-Two(Inside modelbundle):
public class
{
public bool get { get; set; }
public bool list { get; set; }
public bool set { get; set; }
public bool delete { get; set; }
public bool all { get; set; }
public string ObjectId { get; set; }
public string displayName { get; set; }
}
在大卫的帮助下 - 这对我有用。我知道它可以在没有蓝色/黄色变量的情况下完成,但它让我更容易阅读:
@{
var yellow = Model.One[item].DisplayName;
Model.Two[item].displayName = yellow;
var blue = Model.One[item].ObjectId;
Model.Two[item].ObjectId = blue;
}
@Html.HiddenFor(modelItem => Model.Two[item].displayName);
@Html.HiddenFor(modelItem => Model.Two[item].ObjectId);
答案 0 :(得分:1)
在此控制器操作中:
[HttpPost]
public ActionResult Post(modelbundle model)
{
//...
}
model
变量仅具有客户端页面发送的内容。而已。因此,例如,此客户端输入正在为此属性发送值:
@Html.CheckBoxFor(modelItem => Model.Two[item].set)
但是,这根本不会创建任何类型的客户端标记:
@Model.Two[item].ObjectId = Model.One[item].ObjectId;
该行所做的就是在传递给视图的模型实例上设置一个属性。如果在渲染视图时从不使用该属性,那么一旦视图完成构建并且该模型的实例超出范围,它就会丢失。
在结构上,概念与此类似:
void Method1()
{
var something = new SomeObject();
Method2(something);
}
void Method2(SomeObject obj)
{
obj.SomeProperty = "some value";
}
该属性已成功设置,但只要Method1()
完成执行就会丢失,因为没有使用它。那个例子超出了范围,现在已经消失了。当您稍后创建SomeObject
的新实例时(因为模型绑定器在从客户端接收请求时在ASP.NET中执行),该 new 实例将不会进行更改你做了以前的实例。
循环回您的Web应用程序...为了将该值包含在发布回服务器的内容中,该值将需要包含在发布的表单中。像这样:
@Html.HiddenFor(modelItem => Model.Two[item].ObjectId)
这将呈现<input type="hidden" />
,其中包含要与表单一起发布的值。请注意,由于此值将来自客户端,因此用户可以编辑该值。