加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 为什么我的textBoxFor使用我的路由数据?

发布时间:2020-12-16 07:05:29 所属栏目:asp.Net 来源:网络整理
导读:所以我有这三行: div style="background-color: lightgreen;"@Html.TextBoxFor(m = m.Id)/divdiv style="background-color: green;"@Html.DisplayTextFor(m = m.Id)/divdiv style="background-color: pink;"@Model.Id/div 我已经确定lightgreen值不是我的Mo
所以我有这三行:

<div style="background-color: lightgreen;">@Html.TextBoxFor(m => m.Id)</div>
<div style="background-color: green;">@Html.DisplayTextFor(m => m.Id)</div>
<div style="background-color: pink;">@Model.Id</div>

我已经确定lightgreen值不是我的Model.Id,而是我的路由设置的Id:

routes.MapRoute("Default","{controller}/{action}/{id}",new { controller = "MyFunController",action = "Index",id = UrlParameter.Optional });

我在这里得到了一些解释:

> http://forums.asp.net/t/1792086.aspx/1
> http://www.hanselman.com/blog/TheWeeklySourceCode38ASPNETMVCBetaObscurityModelStateIsValidIsFalseBecauseModelBinderPullsValuesFromRouteData.aspx
> http://ayende.com/blog/3683/reproducing-a-bug

但他们都让我胃口大开.我正在寻找一种解决此问题的聪明方法,我不想更改模型的属性名称,也不想更改路径项的名称.如果我这样做将代表我的很多工作,并不理想.

我确定我不是唯一一个有这个问题的人吗?

(这是MVC 4)

谢谢!

解决方法

您可以在呈现视图的控制器操作中从ModelState(这是Html帮助程序从中获取它)中删除有问题的值:

public ActionResult SomeAction(int id)
{
    ModelState.Remove("Id");
    MyViewModel model = ...
    return View(model);
}

现在它是你的视图模型的Id属性,它将被TextBox使用而不是来自路径的那个.

显然,这只是一个丑陋可怕的解决方法.当然,正确的方法是正确定义视图模型,这样就不会出现这种命名冲突.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读