2012-09-19 26 views
2

所以我有一個URL操作閱讀在RouteValues到控制器

<a href="@Url.Action("Create","Teacher", new { createAndAssign = true, teacherID = Model.AccountID })">Create new teacher & assign to account.</a> 

那傳入兩個routeValues:createAndAssign和teacherID。

現在,當我去我的老師/創建頁面,我的網址,像這樣:

.../Teacher/Create?createAndAssign=True&teacherID=ea817321-5633-4fdc-b388-5dba2c4a728e 

這是很好的,我想這一點。現在,當我POST創建我的老師時,我如何抓取createAndAssign和teacherID值?

回答

3

您可以在一個隱藏變量的形式設置的查詢字符串值和渲染在你的GET操作方法中,並接受你的POST操作方法。

查看您的GET行動

@using (Html.BeginForm()) 
{ 
//Other form elements also 
    @Html.Hidden("teacher",@Request.QueryString["teacherID"] as string) 
    @Html.Hidden("createAndAssign",@Request.QueryString["createAndAssign"] 
                    as string) 
    <input type="submit" /> 
} 

,現在呈現在你的HttpPost操作方法teacher參數和createAndAssign參數,這樣當你提交表單這將是可用的。

[HttpPost] 
public ActionResult Create(string teacher,string createAndAssign) 
{ 
    //Save and Redirect  
} 

如果你的看法是強類型(這是我個人的偏好),這是很容易的,

public ActionResult GET(string teacherID,string createdAndAssing) 
{ 
    var yourVMObject=new YourViewModel(); 
    yourVMObject.TeacherID=teacherID; 
    yourVMObject.CreateAndAssign=createdAndAssing; 
    return View(createdAndAssing); 
} 

,並在你的強類型來看,

@model YourViewModel 
@using (Html.BeginForm()) 
{ 
//Other form elements also 
    @Html.HiddenFor(x=>x.TeacherID) 
    @Html.HiddenFor(x=>x.CreateAndAssign)          
    <input type="submit" /> 
} 

而且在你的POST動作

[HttpPost] 
public ActionResult Create(YourViewModel model) 
{ 
    //look for model.TeacherID 
    //Save and Redirect  
} 
+0

不知道爲什麼我沒有考慮使用viewModel,因爲我在其他方面使用了一堆。謝謝! –

1

你可以從查詢字符串或作爲控制器的PARAMS獲得的價值就像

var x =Request.QueryString["createAndAssign"]; 

public ActionResult Create(bool createAndAssign, string teacherID){ 


return View(); 
} 
+0

好吧,爲了讓他們在HttpPost中工作,我只是將他們存儲在@ Html.Hidden()中? –

+1

請參閱@Shyju回答 – JIA

+0

不在MVC中,這完全違背了它的內容。 – simonlchilds