在ASP.NET MVC 4中按模型将URL参数传递给操作

时间:2015-04-01 20:18:20

标签: asp.net-mvc-4 model url-parameters

我想将我的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; }
}

1 个答案:

答案 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 valuehttp://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帮助程序。