簡體   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