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

asp.net-mvc – ASP.NET MVC 5 Html.HiddenFor呈现不正确的属性

发布时间:2020-12-16 07:34:27 所属栏目:asp.Net 来源:网络整理
导读:Visual Studio 2013 Professional C# .NET 4.5 Framework ASP.NET MVC 5 在我的视图模型类中,我有一个名为SerializedSelf的属性,它用于将自身表示为序列化字符串,也可以反序列化,但仅限于尚未初始化的任何属性.我使用它来通过使用具有此值的单个隐藏输入来简
> Visual Studio 2013 Professional
> C#
> .NET 4.5 Framework
> ASP.NET MVC 5

在我的视图模型类中,我有一个名为SerializedSelf的属性,它用于将自身表示为序列化字符串,也可以反序列化,但仅限于尚未初始化的任何属性.我使用它来通过使用具有此值的单个隐藏输入来简化视图模型的往返.在传递给控制器??方法之前,框架将在模型中填充与模型相关的任何其他输入.

我遇到的问题是,在我的剃刀视图代码中,这不能正确呈现:

@Html.HiddenFor(model => model.SerializedSelf)

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

但这很正常:

<input type="hidden" name="SerializedSelf" id="SerializedSelf" value="@Model.SerializedSelf" />

所以我猜它可能与lambda表达式和附件有关???当我在源代码中单步执行时,SerializedSelf在我调用return View(“myView”,model)之前就具有正确的值.

这是视图模型代码:

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:我今天没有时间研究这个问题,但是我想到,SerializedSelf属性上的[JsonIgnore]属性可能是罪魁祸首,而且它干扰了MVC框架中的某些东西.我会尽快调查并更新.

解决方法

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

(编辑:李大同)

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

    推荐文章
      热点阅读