我有一个继承自POCO类的强类型视图。我想在视图加载时使用Querystring值初始化模型的属性。
在View Load上我使用ViewData来保存代码:
public ActionResult Data() {
ViewData["QueryStringValue"] = this.Request.QueryString["Param1"]
return View();
}
在HTML标记中,我使用此代码初始化隐藏变量中的模型属性
<%:Html.HiddenFor(m=>m.Param,
Convert.ToInt32(Html.Encode(ViewData["QueryStringValue"]))) %>
m.param是一种字节类型。
请求的网址有点像这样:http://TestApp/Data/AddData?Param1=One
在View Save事件上,我正在使用模型绑定,但问题是我没有看到在控制器中初始化的param的值。它始终为NULL。
我的保存事件映射到控制器:
[HttpPost]
public ActionResult SaveData(MyData d)
{
string paramValue = d.Param; //this always returns null
BO.Save(d); }
我检查了HTML源代码,发现隐藏字段本身的值是空白的。不知道为什么会发生这种情况,因为下面的代码有效,并在标题元素
中显示参数值<h2> <%=Html.Encode(ViewData["QueryStringValue"]) %> </h2>
我不知道我在哪里出错了。
答案 0 :(得分:2)
我认为,您应该将其设置为ViewData
的属性值,而不是传递ViewModel/ Model
中的查询字符串值,并将其传递给您的视图。
public ActionResult Data()
{
YourViewModel objVm=new YourViewModel();
objVm.Param=Request.QueryString["Param1"];
return View(objVm);
}
现在在强类型视图中,像这样使用
@model YourViewModel
@using(Html.BeginForm())
{
@html.HiddenFor(@m=>m.Param);
<input type="submit" value="Save" />
}
现在Param值将在HttpPost
动作方法
[HttpPost]
public ActionResult Data(YourViewModel objVm)
{
string param=objVm.Param;
//Do whatever you want with param
}
答案 1 :(得分:0)
刚刚完成这项工作,问题在于这一行:
<%:Html.HiddenFor(m=>m.Param,
Convert.ToInt32(Html.Encode(ViewData["QueryStringValue"]))) %>. I stated in the question that m.Param is of type byte. I figured out that issue was with casting.
我尝试了这段代码并且有效
<%:Html.HiddenFor(m => m.Param, (byte)Convert.ToInt16(this.Request.QueryString["Param1"].ToString()))%>