我的控制器中有一个动作:
public PartialViewResult MyAction(int? myId, int? myId2)
{
MyModel model = new MyModel() { MyId = 10, MyId2 = 20 }
return PartialView(model);
}
以下是我的观点:
@model StartSite.Models.Shared.MyModel
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.MyId)
@Html.HiddenFor(m => m.MyId2)
<p>
<input type="submit" value="Submin" />
</p>
}
让我们用params myId = 1&amp; myId2 = 2 调用MyAction。但是使用不同的值创建模型 new MyModel(){MyId = 10,MyId2 = 20} 。什么应该呈现在视野中?正如我所料,它应该是:
<input id="MyId" name="MyId" type="hidden" value="10">
<input id="MyId2" name="MyId2" type="hidden" value="20">
但实际上结果是:
<input id="MyId" name="MyId" type="hidden" value="1">
<input id="MyId2" name="MyId2" type="hidden" value="2">
我猜 Html.HiddenFor 的值不是来自我的模型,而是来自 Reauest.QueryString ,这是 myId = 1&amp; myId2 = 2 在渲染视图的那一刻。
为什么会这样?这是预期的行为吗?
更新1: 我已将我的问题编辑得更清楚了。
答案 0 :(得分:0)
可以使用此
访问提交尝试中的模型 [HttpPost]
public virtual PartialViewResult MyAction(MyModel model)
{
//MyModel model = new MyModel();
// if (myId != null)
// model.MyId= myId;
// else if (myId2 != null)
// model.MyId2= myId2;
//now you have access to your model values
return PartialView(model);
}
答案 1 :(得分:0)
这是预期的行为。首先,没有任何属性的Action
自动为HttpGet
。接下来,您的Action
需要“myId
”的值。这意味着,如果调用您的Action
的网址具有匹配的查询字符串,则它将接受该值。最后,Action
接受的值是大小写不敏感。因此,您无需手动设置模型值。你可以这样做:
public virtual PartialViewResult MyAction(MyModel model)
{
return PartialView(model);
}
所以当你去你的网址时,例如localhost/myaction?myId=2
,model.MyId
将设为2。
如果您不希望通过查询字符串设置模型,则必须将Action
更改为不接受任何值。