此代码无效

// remove the Step variable from the model state

// if you want the changes in the model to be

// taken into account

ModelState.Remove("Step");

model.Step = 2;

...因为HiddenFor always(!)从ModelState读取而不是模型本身 . 如果它没有找到“Step”键,它将产生该变量类型的默认值,在这种情况下它将为0

这是解决方案 . 我是为自己写的,但不介意分享它,因为我看到很多人都在为这个顽皮的HiddenFor帮手挣扎 .

public static class CustomExtensions

{

public static MvcHtmlString HiddenFor2(this HtmlHelper htmlHelper, Expression> expression)

{

ReplacePropertyState(htmlHelper, expression);

return htmlHelper.HiddenFor(expression);

}

public static MvcHtmlString HiddenFor2(this HtmlHelper htmlHelper, Expression> expression, object htmlAttributes)

{

ReplacePropertyState(htmlHelper, expression);

return htmlHelper.HiddenFor(expression, htmlAttributes);

}

public static MvcHtmlString HiddenFor2(this HtmlHelper htmlHelper, Expression> expression, IDictionary htmlAttributes)

{

ReplacePropertyState(htmlHelper, expression);

return htmlHelper.HiddenFor(expression, htmlAttributes);

}

private static void ReplacePropertyState(HtmlHelper htmlHelper, Expression> expression)

{

string text = ExpressionHelper.GetExpressionText(expression);

string fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(text);

ModelStateDictionary modelState = htmlHelper.ViewContext.ViewData.ModelState;

ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

if (modelState.ContainsKey(fullName))

{

ValueProviderResult currentValue = modelState[fullName].Value;

modelState[fullName].Value = new ValueProviderResult(metadata.Model, Convert.ToString(metadata.Model), currentValue.Culture);

}

else

{

modelState[fullName] = new ModelState

{

Value = new ValueProviderResult(metadata.Model, Convert.ToString(metadata.Model), CultureInfo.CurrentUICulture)

};

}

}

}

然后你可以像往常一样在你看来使用它:

@Html.HiddenFor2(m => m.Id)

值得一提的是它也适用于收藏品 .

mvc html.hidden,ASP.Net MVC Html.HiddenFor有错误的值相关推荐

  1. 学习笔记 --- 工厂、单体、适配器、策略、观察者、MVC设计模式及ASP.NET MVC开发模式、关闭缓存的方法...

    关于工厂.单体.适配器.策略.观察者没啥好说的, 代码中有说明 //DesignPattern.cs View Code using System; using System.Collections. ...

  2. ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点

    参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...

  3. mvc html dropdownlist,ASP.NET MVC中使用DropDownList地详解

    DropDownList控件又称下拉列表框控件,DropDownList控件动态连接到数据库,按指定 条件从数据库 中查询 出列表选项数据,然后绑 定到控件,可以方便快速地显示出多个下拉选 项 . 同 ...

  4. mvc html validator,ASP.NET MVC实现Validation验证器扩展

    今天介绍在ASP.NET MVC实现Validation验证器扩展,通过使用Controller验证并不是最好的方法:验证过于分散,容易造成重复代码,不利于维护与扩展,因此本节将使用MVC默认绑定器( ...

  5. [导入]ASP.NET MVC框架开发系列课程(1):MVC模式与ASP.NET MVC框架概述.zip(8.80 MB)

    讲座内容: ASP.NET MVC框架是既ASP.NET WebForms后的又一种开发方式.它提供了一系列优秀特性,使ASP.NET开发人员拥有了另一个选择.本次课程将对MVC模式ASP.NET M ...

  6. php .net mvc,总是觉得asp.net MVC 写着很别扭,对比PHP的mvc,asp.net 麻烦很多?

    没写过php,但有ASP.NET MVC的开发经验,这里简单地说一下自己的理解. 首先通过一张图来看ASP.NET MVC的一个交互原理: Model层其实是一个很大的概念,包含了服务,业务逻辑,数据 ...

  7. mvc ajax helpers,ASP.NET MVC 实践系列4-Ajax应用

    ASP.NET MVC中支持Ajax的方式和webform中有些区别,没有了updatepanel,所以对于初学者来说在最开始应用时似乎没有在webform中简单,但实际使用上更为灵活而跟webfor ...

  8. asp.net mvc 点滴 一 asp.net mvc vs asp.net web forms

    MVC模式是一个大家很熟悉的设计模式,微软的asp.net mvc framework是给asp.net web forms提供了一个可替换的asp.net方案. Models:Model对象是程序的 ...

  9. asp.net+mvc+html辅助,ASP.NET MVC使用Ajax的辅助的解决方法

    前言:前面我们已经简单的介绍过了MVC如何Jquery,因为我们如果使用Ajax的话必须要了解Jquery,这篇博客我们将大致了解一下ASP.NET MVC如何使用Ajax的辅助方法,此博客是我的读书 ...

最新文章

  1. 《剑指offer》孩子们的游戏---约瑟夫问题
  2. 用linux命令通常做什么,如何知道你在 Linux 里最常使用的几个命令?
  3. 字符串hash(一)
  4. Java中的阻塞队列-LinkedBlockingQueue(二)
  5. 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<指定任务委派人篇>
  6. linux 路由协议,路由协议之RIP协议
  7. bug—jupyter notebook 连接不上kernel内核问题
  8. extjs fileuploadfield default value
  9. 9447 CTF:no-strings-attached
  10. java web导出excel_javaweb导出excel文件的简单步骤
  11. EXCEL以及VBA 函数讲解集合
  12. matlab如何模拟数字舵机,模拟舵机和数字舵机区别
  13. 决策树分类——附数据下载
  14. 超详细测试项目——Web电商项目测试点整理.....
  15. C#窗体加标尺的两种方式及显现效果
  16. 白光迈克尔逊干涉仪的仿真
  17. /etc/sysconfig/network-scripts 配置网卡
  18. MAC 强制退出程序
  19. [Games104笔记] 游戏中的渲染管线,后处理
  20. hook ZwQuerySystemInformation 隐藏进程

热门文章

  1. matlab语言和python_matlab语言转译成python
  2. nodejs生成动态网页
  3. python之字典的操作
  4. 数学发展史中最重要的4个阶段
  5. python基础其他(二十一)
  6. python解释器安装步骤_Python 解释器
  7. 操作系统OS进程(一)初识
  8. linux环境重装rabbitmq,Linux系统安装RabbitMQ详细教程-Go语言中文社区
  9. 久其报表大厅_天下苦“数”久矣,大数据分析平台解决物流数据孤岛
  10. vector使用中可能出现的一个陷阱