0

我有一个从 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 是字节类型。

请求的 URL 有点像这样: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.保存(d);}

我检查了 HTML 源代码,发现隐藏字段本身的值是空白的。不知道为什么会发生这种情况,因为下面的代码有效并在标题元素中显示了参数值

<h2> <%=Html.Encode(ViewData["QueryStringValue"]) %> </h2>

我不知道我在哪里出错了。

4

2 回答 2

2

ViewData我认为,您应该将其设置为您的属性值ViewModel/ Model并将其传递给您的视图,而不是传递 Querystring 值。

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 
}
于 2012-05-02T22:04:41.737 回答
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()))%>
于 2012-05-02T23:22:22.760 回答