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

前端之家收集整理的这篇文章主要介绍了使用Route Id值的ASP.NET MVC 3 Model Id前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
脚本
路线:/ 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(或创建自定义视图模型).

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

原文链接:https://www.f2er.com/aspnet/249313.html

猜你在找的asp.Net相关文章