2011-09-07 158 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使用,这使得它们可以绑定到您的模型,而无需您执行任何进一步的操作。