繁体   English   中英

值未显示在视图中

[英]Value doesn't appear filled in the View

我这里有一个奇怪的问题。

在模型(.cs)中:

    public long? ContactoAdditionalId { get; set; }
    public long Test1 { get; set; }
    public long? Test2 { get; set; }
    public string Test3 { get; set; }

在Controller中(在操作之前,在视图之前):

    [HttpPost]
    [AllowAnonymous]
    public ActionResult Index( Contacto model )
    {
        DoSomeStuff( model, ... );

        (...)

        model.Test1 = model.ContactoAdditionalId.HasValue ? model.ContactoAdditionalId.Value : -1;
        model.Test2 = model.ContactoAdditionalId;
        model.Test3 = model.ContactoAdditionalId.HasValue ? model.ContactoAdditionalId.Value.ToString() : "No value!";
        return View( model );
    }

最后在视图(.cshtml)中:

@using MyApp.Models;

@model Contacto

@using ( Html.BeginForm( "Index", "Contacto" ) )
{
    @Html.HiddenFor( model => model.ContactoAdditionalId )
    @Html.HiddenFor( model => model.Test1 )
    @Html.HiddenFor( model => model.Test2 )
    @Html.HiddenFor( model => model.Test3 )
    (...)

正如你可能已经猜到了,ContactoAdditionalId(我把它用真名,如果是问题)值在视图中出现。

当我按下F12在Chrome中打开开发者工具和检查HTML, 没有为ContactoAdditionalId没有价值 ,但也测试1,Test2的和Test3的值。

注意我用了很久,很久吗? 和一个用于检查问题是否与类型有关的字符串,但是所有这三个字符均在HTML中显示值。

当然,此隐藏字段的目的是在发帖时取回ContactoAdditionalId。 这样,它不起作用,并且其model属性为null!

我还注意到了一些奇怪的事情:如果在View中添加HiddenFor之前:

@Html.DisplayFor( model => model.ContactoAdditionalId, ... )

它突然起作用,现在隐藏字段具有价值!

这是怎么回事 我在Visual Studio 2017中逐步进行了调试,当我到达动作代码结尾时,它开始单步进入cshtml视图,因此没有其他代码(据我所知,至少不是我们项目的代码)动作之后并且在视图中HTML变换前被执行。

您可能在ModelState中有一个参数,名称与您看不到数据的名称相同。 如果要在Model中更改该值,而没有从ModelState中清除该值,则HiddenFor将首先选择ModelState字段。 请执行ModelState.Clear()或仅删除具有ModelState.Remove(“ ContactoAdditionalId”)“的字段

另外,您可以使用ModelState.Clear()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM