我想将我的url参数分配给Model属性,作为参数传递给关联的Action。例如;
说,我的网址是http://www.example.com/Item/Index?color=red&size=50
我在控制器内的动作如下:
public class ItemController : Controller
{
public ActionResult Index(MyModel myModel)
{
//
return View(myModel);
}
}
我想配置模型或任何必要的模型,以便我的模型将颜色和大小作为字段值。以下没有工作:
public class MyModel
{
[Display(Name = "color")]
public string Color{ get; set; }
[Display(Name = "size")]
public string Size{ get; set; }
}
解决问题的正确方法是什么?
感谢您的任何建议。
嗯,是的!上面的代码可以正常工作,因为Url参数名称与模型属性名称相同。我应该像下次遇到的那样解释我的问题,对不起。
我必须纠正我的一部分问题才能说清楚。该网址应该是:http://www.example.com/Item/Index?c=red&s=50来检测问题。
如果网址是这样的,代码将无效。因为Url参数不具有与模型属性相同的名称。
更新后的型号如下:
public class MyModel
{
[Display(Name = "c")]
public string Color{ get; set; }
[Display(Name = "s")]
public string Size{ get; set; }
}
答案 0 :(得分:0)
尝试在参数前面添加[FromUri]。
public class ItemController : Controller
{
public ActionResult Index([FromUri] MyModel myModel)
{
// do something
return View();
}
}
以下是调试问题的一些建议,因为它应该是开箱即用的。
尝试绑定到基本类型
public class ItemController : Controller { public ActionResult Index(string color, string size) { // do something return View(); } }
尝试直接读出请求对象
var size = this.Request["size"];
如果其中任何一个工作,则模型绑定存在问题。
如果您希望查询字符串参数与MVC中的模型不同,则需要使用自定义模型绑定器。看看Asp.Net MVC 2 - Bind a model's property to a different named value和http://ole.michelsen.dk/blog/bind-a-model-property-to-a-different-named-query-string-field.html,它会稍微扩展答案。
https://github.com/yusufuzun/so-view-model-bind-20869735有一些示例,其中包含一些可能有用的html帮助程序。