2012-05-02 71 views
0

我有一個強類型視圖繼承自POCO類。我想在視圖加載時用Querystring值初始化模型的屬性。將查詢字符串數據傳遞給ASP.NET MVC中的模型2

在我使用的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

上查看保存的事件,我使用模型約束力,但問題是,我沒有能看到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

只是做這項工作可以,問題是用此行:

<%: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()))%> 
2

我認爲,您應該將其設置爲您的ViewModel/ Model的屬性值並將其傳遞給您的視圖,而不是通過在ViewData中傳遞查詢字符串值。

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" /> 
} 

現在帕拉姆值將在YOUT HttpPost操作方法

[HttpPost] 
public ActionResult Data(YourViewModel objVm) 
{ 
    string param=objVm.Param; 
    //Do whatever you want with param 
} 
+0

另外,我想補充.. @model類型聲明不MVC 2 –

+0

工作,這工作:),但是這不是我要的。我事先知道這個解決方案。我想知道我的代碼出錯了。最後它歸結爲一個鑄造問題。 –

+0

@Kunal:很高興你的工作。爲什麼不切換到MVC 3? – Shyju

相關問題