Asp.net mvc 4 在ASP.NET MVC 4中按模型将Url参数传递给操作

Asp.net mvc 4 在ASP.NET MVC 4中按模型将Url参数传递给操作,asp.net-mvc-4,model,url-parameters,Asp.net Mvc 4,Model,Url Parameters,我想将url参数分配给模型属性,并作为参数传递给关联的操作。比如, 我的网址是 我在控制器内的操作如下所示: public class ItemController : Controller { public ActionResult Index(MyModel myModel) { // return View(myModel); } } 我想配置模型或任何必要的配置,以便我的模型将颜色和大小作为字段值。以下操作不起作用: publi

我想将url参数分配给模型属性,并作为参数传递给关联的操作。比如,

我的网址是

我在控制器内的操作如下所示:

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参数名称与模型属性名称相同。我应该解释我的问题,就像我下次遇到的一样,对不起

我必须把问题的一部分更正清楚。url应该是:以检测问题

如果url是这样的,那么代码将无法工作。因为Url参数与模型属性的名称不同

更新模型如下:

public class MyModel 
{
    [Display(Name = "c")]
    public string Color{ get; set; }

    [Display(Name = "s")]
    public string Size{ get; set; }
}

尝试在参数前面添加[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(); } } 公共类ItemController:控制器 { 公共操作结果索引(字符串颜色、字符串大小) { //做点什么 返回视图(); } }
  • 尝试直接读取请求对象

    var size = this.Request["size"]; var size=this.Request[“size”]
如果这两种方法都有效,那么您的模型绑定就会出现问题

使现代化 如果希望查询字符串参数与MVC中的模型不同,则需要自定义模型绑定器。看一下和,它稍微扩展了答案


有一个可能有用的html助手示例。

它不起作用,因为您操作的参数类型为MyModel,而您使用的模型类型为PageModel。有什么问题?您的代码将为
MyModel
的属性分配值(但您不会对模型执行任何操作-例如
返回视图(模型);
)我的代码不会分配值。这就是问题所在。我可以在调试模式下看到问题。不需要使用模型来查看问题。这不是重点,也就是说,使用模型与否。当然,它是这样的。如果这不起作用,代码中显然还有其他问题。在这种情况下,请使方法
public ActionResult Index(string c,string s)
并使用这些值初始化
MyModel
的新实例,或者更改属性的名称-
public string c{get;set;}public string s{get;set;}
OK。我必须承认这是一个漫不经心的问题。实际上,我想指出的技巧是如何从URL到模型获取参数。在调试模式下点击Action方法没有问题。@mhmtztmr我认为这可能是原因,但最好先指出明显的错误。我已经相应地更新了我的答案。@mhmtztmr您的示例应该是开箱即用的。您可以尝试使用更准确的代码更新您的问题,或者提供重现问题的项目。我添加了一些您可能会尝试缩小问题范围的内容。我已将我的问题更新为我遇到问题的确切形式。