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

使用Route Id值的ASP.NET MVC 3 Model Id

发布时间:2020-12-15 22:34:03 所属栏目:asp.Net 来源:网络整理
导读:脚本 路线:/ template / customize / 10 其中:10 =模板的ID() 在控制器中,模型是基于模板创建的,因此View的模型实际上是一个Customization()对象,实际上Id为0,因为它是新的. 在视图中我渲染@ Html.HiddenFor(m = m.Id)并且隐藏输入的结果值是10,尽管它应该
脚本
路线:/ template / customize / 10
其中:10 =模板的ID()

在控制器中,模型是基于模板创建的,因此View的模型实际上是一个Customization()对象,实际上Id为0,因为它是新的.

在视图中我渲染@ Html.HiddenFor(m => m.Id)并且隐藏输入的结果值是10,尽管它应该是0,因为m是Customization类型.我之前使用MVC 2遇到过这种情况,并且通过不使用辅助方法解决了这个问题.

问题

>是否有注释或其他东西
可以添加到Html Helper方法
实际上渲染正确的值?
>这是一个错误(MVC似乎是
渲染m.Id作为路线值
无论实际型号是什么
设置在控制器中)?

附加代码澄清

视图

@model Project.Core.Domain.Customization
@using( Html.BeginForm( "save","customization" ) )
{
    @Html.HiddenFor( m => m.Id )
    @Html.HiddenFor( m => m.Template.Id )
    <button type="submit" id="save" name="save">Save</button>
}

调节器

public ActionResult Customize( int id )
    {
        var template = Persistence.Data.RetrieveObject<Template>( id );
        var model = new Customization();

        ViewBag.Template = template;
        return ( View( model ) );
    }

将Action的签名更改为:

public ActionResult Customize( int TemplateId ){ ... }

将链接更改为操作:

@Html.ActionLink( "customize","customize",new { TemplateId = template.Id } )

我最终得到了一个看起来像的网址

/template/customize?TemplateId=10

这很丑陋,但是我可以用模型来保持我的观点清洁.所以这对我来说是一场胜利.

解决方法

我认为这是因为当你使用像@ Html.HiddenFor(m => m.Id)这样的东西时,html助手会在各个地方查看以填充输入的值,并且路径中的值就是其中一个位置.

因此,您可以更改路线,使其类似于模板/自定义/ {TemplateId},然后让您的操作方法反映出来,例如: public ActionResult Customize(int templateId).

或者您可以更改具有CustomizationId属性而不仅仅是Id的viewmodel(或创建自定义视图模型).

不,它不是一个错误…它更像是一个可以带来无法预料的后果的功能.但是一旦你意识到它,它就像一种享受.

(编辑:李大同)

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

    推荐文章
      热点阅读