mvc html.hidden,ASP.Net MVC Html.HiddenFor有错误的值
此代码无效
// 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有错误的值相关推荐
- 学习笔记 --- 工厂、单体、适配器、策略、观察者、MVC设计模式及ASP.NET MVC开发模式、关闭缓存的方法...
关于工厂.单体.适配器.策略.观察者没啥好说的, 代码中有说明 //DesignPattern.cs View Code using System; using System.Collections. ...
- ASP.NET MVC 5 02 - ASP.NET MVC 1-5 各版本特点
参考书籍:<ASP.NET MVC 4 高级编程>.<ASP.NET MVC 5 高级编程>.<C#高级编程(第8版)>.<使用ASP.NET MVC开发企业 ...
- mvc html dropdownlist,ASP.NET MVC中使用DropDownList地详解
DropDownList控件又称下拉列表框控件,DropDownList控件动态连接到数据库,按指定 条件从数据库 中查询 出列表选项数据,然后绑 定到控件,可以方便快速地显示出多个下拉选 项 . 同 ...
- mvc html validator,ASP.NET MVC实现Validation验证器扩展
今天介绍在ASP.NET MVC实现Validation验证器扩展,通过使用Controller验证并不是最好的方法:验证过于分散,容易造成重复代码,不利于维护与扩展,因此本节将使用MVC默认绑定器( ...
- [导入]ASP.NET MVC框架开发系列课程(1):MVC模式与ASP.NET MVC框架概述.zip(8.80 MB)
讲座内容: ASP.NET MVC框架是既ASP.NET WebForms后的又一种开发方式.它提供了一系列优秀特性,使ASP.NET开发人员拥有了另一个选择.本次课程将对MVC模式ASP.NET M ...
- php .net mvc,总是觉得asp.net MVC 写着很别扭,对比PHP的mvc,asp.net 麻烦很多?
没写过php,但有ASP.NET MVC的开发经验,这里简单地说一下自己的理解. 首先通过一张图来看ASP.NET MVC的一个交互原理: Model层其实是一个很大的概念,包含了服务,业务逻辑,数据 ...
- mvc ajax helpers,ASP.NET MVC 实践系列4-Ajax应用
ASP.NET MVC中支持Ajax的方式和webform中有些区别,没有了updatepanel,所以对于初学者来说在最开始应用时似乎没有在webform中简单,但实际使用上更为灵活而跟webfor ...
- asp.net mvc 点滴 一 asp.net mvc vs asp.net web forms
MVC模式是一个大家很熟悉的设计模式,微软的asp.net mvc framework是给asp.net web forms提供了一个可替换的asp.net方案. Models:Model对象是程序的 ...
- asp.net+mvc+html辅助,ASP.NET MVC使用Ajax的辅助的解决方法
前言:前面我们已经简单的介绍过了MVC如何Jquery,因为我们如果使用Ajax的话必须要了解Jquery,这篇博客我们将大致了解一下ASP.NET MVC如何使用Ajax的辅助方法,此博客是我的读书 ...
最新文章
- 《剑指offer》孩子们的游戏---约瑟夫问题
- 用linux命令通常做什么,如何知道你在 Linux 里最常使用的几个命令?
- 字符串hash(一)
- Java中的阻塞队列-LinkedBlockingQueue(二)
- 全网最新Spring Boot2.5.1整合Activiti5.22.0企业实战教程<指定任务委派人篇>
- linux 路由协议,路由协议之RIP协议
- bug—jupyter notebook 连接不上kernel内核问题
- extjs fileuploadfield default value
- 9447 CTF:no-strings-attached
- java web导出excel_javaweb导出excel文件的简单步骤
- EXCEL以及VBA 函数讲解集合
- matlab如何模拟数字舵机,模拟舵机和数字舵机区别
- 决策树分类——附数据下载
- 超详细测试项目——Web电商项目测试点整理.....
- C#窗体加标尺的两种方式及显现效果
- 白光迈克尔逊干涉仪的仿真
- /etc/sysconfig/network-scripts 配置网卡
- MAC 强制退出程序
- [Games104笔记] 游戏中的渲染管线,后处理
- hook ZwQuerySystemInformation 隐藏进程