将Querystring数据传递给ASP.NET MVC 2中的Model

时间:2012-05-02 21:55:54

标签: asp.net .net asp.net-mvc asp.net-mvc-2 viewdata

我有一个继承自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>

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

2 个答案:

答案 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()))%>