gpt4 book ai didi

asp.net-mvc - ASP.NET MVC 5 Html.HiddenFor 呈现不正确的属性值,但 Model.Property 呈现正确的值

转载 作者:行者123 更新时间:2023-12-04 21:52:30 31 4
gpt4 key购买 nike

  • Visual Studio 2013 专业版
  • C#
  • .NET 4.5 框架
  • ASP.NET MVC 5

  • 在我的 View 模型类中,我有一个名为 SerializedSelf 的属性。用于将自身表示为序列化字符串并反序列化,但仅限于尚未初始化的任何属性。我使用它来简化我的 View 模型的往返,通过具有此值的单个隐藏输入。与模型相关的任何其他输入将在传递给 Controller ​​方法之前由框架填充到模型中。

    我遇到的问题是,在我的 Razor View 代码中,这不能正确呈现:
     @Html.HiddenFor(model => model.SerializedSelf)

    我还没有确定它是否正在序列化一个完全未初始化的 MyViewModel对象或者它是来自其他地方的实例。

    但这可以正常工作:
     <input type="hidden" name="SerializedSelf" id="SerializedSelf" value="@Model.SerializedSelf" />

    所以我猜它可能与 lambda 表达式和 shell 有关???当我单步执行源代码时, SerializedSelf在我打电话之前有正确的值(value) return View("myView", model) .

    这是 View 模型代码:
    using Newtonsoft.Json;
    using System;
    using System.Text;

    public class MyViewModel
    {
    [JsonIgnore]
    public string SerializedSelf
    {
    get
    {
    return JsonConvert.SerializeObject(this);
    }
    set
    {
    if (string.IsNullOrWhiteSpace(value)) return;

    string json = value;
    MyViewModel copy = JsonConvert.DeserializeObject<MyViewModel>(json);
    if (Message == null) Message = copy.Message;
    if (Phone == null) Phone = copy.Phone;
    // ...
    }
    }

    public string Message { get; set; }
    public string Phone { get; set; }
    // ...

    }

    有什么区别:
    @Html.HiddenFor(model => model.SerializedSelf)


    @Model.SerializedSelf

    什么会导致前者不准确?

    更新 2013/12/5:我从 SerializedSelf 中删除了逻辑并显式序列化/反序列化到/从 SerializedSelf在适当的时候测试这是否有任何影响。它没有影响,行为正如我上面描述的那样。

    2013/12/5 更新:删除了 HTML 编码和解码。以前尝试解决问题时遗留下来的。

    2013 年 12 月 5 日更新:我今天没有时间研究这个问题,但我突然想到可能是 [JsonIgnore] SerializedSelf 上的属性属性是罪魁祸首,它干扰了 MVC 框架中的某些内容。我会尽快调查并更新。

    最佳答案

    如果在响应 POST 请求而呈现 View 之后发生这种情况,您应该注意 HTML 帮助程序使用旧值,因为它们认为存在验证错误。您可以在此 blog post 中找到详细说明.

    关于asp.net-mvc - ASP.NET MVC 5 Html.HiddenFor 呈现不正确的属性值,但 Model.Property 呈现正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20403830/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com