【问题标题】:ModelState.Isvalid throwing exception when changing the mvc routing id as string?将 mvc 路由 ID 更改为字符串时,ModelState.Isvalid 抛出异常?
【发布时间】:2015-05-22 11:56:59
【问题描述】:

我将路由配置文件 id 更改为字符串

   public override void RegisterArea(AreaRegistrationContext context) 
    {
        context.MapRoute(
            "Agent_default",
            "Agent/{controller}/{action}/{id}",
            new { Controller = "Home", action = "Index", id = "" }

        );
    }

现在我可以像这样http://localhost:43425/Agent/Accounts/Edit/A64h9lStdffgt 获得我的网址了

但我在保存模型时遇到异常。

抛出异常 ModelState.Isvalid - False

说:值“A64h9lStdffgt”对 Id 无效。如何解决这个问题? ModelState.Isvalid 是如何工作的?为什么会出现此错误?

谢谢

【问题讨论】:

  • 您的模型是否有一个名为 id 的属性?如果有,它是什么类型的?
  • id 类型是整数,我还有其他参数“数字”是字符串。我将 'Number' 传递给 url 而不是 'Id'。
  • 您正在通过id,因为您的路线是"Agent/{controller}/{action}/{id}", 您需要将路线定义更改为"Agent/{controller}/{action}/{number}", 或将您的模型名称id 属性更改为其他名称。

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller asp.net-mvc-routing


【解决方案1】:

代表@Stephen Muecke:

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "Agent_Custom",
        "Agent/{controller}/{action}/{number}",
        new { Controller = "Home", action = "Index", number = "" }
    );

    context.MapRoute(
        "Agent_default",
        "Agent/{controller}/{action}/{id}",
        new { Controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多