2011-09-07 113 views
0

我有一個MVC3應用程序。 對於像http://app/survey/Test這樣的URI,我有以下調查/ {名稱},它非常棒。帶參數的MVC路由

本次調查控制器加載一大堆的問題
每個問題都有一堆可能的答案
可能的答案被放入到一個下拉框或其他一些名單友好的控制現在

如果用戶打一個URI的像http://app/survey/Test?city=London我想以某種方式在我的Model.Question [i] .PossibleAnswers集合中找出倫敦本意是問題「城市」的默認值。

如果用戶打一個URI像http://app/survey/Test?gender=Male&city=London&something=SomethingElse
然後我想測試調查顯示
而且它的性別問題,默認爲男性
這是城市問題,默認爲倫敦
它的一些問題,默認爲SomethingElse

有什麼意義?
任何人有任何想法如何設置?

這有點含糊,很抱歉,但我可以想到描述這個最好的方式。

感謝

+0

只是一個粗略的想法..但由於你的控制器已經在響應http:// app/survey/test,你可以在你的控制器動作中檢查查詢參數。如果某些參數已滿,您可以將您的Viewmodel(假設您使用強類型視圖模型)設置爲某個用戶的默認值。 – Rob

回答

0

您可以使用模型如下結合,然後通過

SurveyModel

在操作方法您可以使用您的SurveyModel行動controllor。 ID爲市SurveyModel.id2等

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
     { 
      IValueProvider valueProvider = bindingContext.ValueProvider; 

      string id = valueProvider.GetValueOrNullString("id"); 
      string id2 = valueProvider.GetValueOrNullString("id2"); 
      string id3 = valueProvider.GetValueOrNullString("id3"); 
      string id4 = valueProvider.GetValueOrNullString("id4"); 

      return new SurveyModel {Id = id, Id2 = id2, Id3 = id3, Id4 = id4}; 
     } 

參考Google Links for More details

0

你不需要做任何事情,除了在你HttpGet行動指定型號,像這樣:

[HttpGet] 
public ActionResult Test(Survey survey) 
{ } 

如果您在GET操作中指定模型,查詢字符串值將被傳遞到模型中,因爲它們被QueryStringValueProvider使用,這使得它們可以綁定到您的模型,而無需您執行任何進一步的操作。