首页 新闻 会员 周边

.net mvc2.0中如何动态添加hidden类型的值

0
悬赏园豆:200 [待解决问题]

如何在OnActionExecuted或者OnActionExecuting事件中向当前页面添加hidden类型的值?

要求添加的hidden值在下次页面提交回来的时候还能够拿到。也就是要添加到form标签内。通过Response.Writer方法添加的不是添加到头就是尾了,页面再提交的时候拿不到。

或者有什么其他的方式可以把值保存到客户端,再提交到服务器的时候还可以拿到的也可以。但不能使用cookie.

刘鸿海的主页 刘鸿海 | 小虾三级 | 园豆:655
提问于:2011-12-14 20:49
< >
分享
所有回答(4)
0

action里加:ViewBag.HiddenField = new MvcHtmlString("<input type='hidden' value='xxx' id='xxx' />");

视图里:@ViewBag.HiddenField

IT Giant | 园豆:7 (初学一级) | 2011-12-15 13:50

谢谢你的回答。不过你没有看明白我的问题。

 

支持(0) 反对(0) 刘鸿海 | 园豆:655 (小虾三级) | 2011-12-15 17:20

解决了我的问题!MVC下页面刷新保存数据

支持(0) 反对(0) cocsea | 园豆:200 (初学一级) | 2015-12-10 15:24
0

ActionFilterAttribute不是干这个用的,你非要这么用说明设计有问题。这个例子可以帮你做到你要的效果,但是看起来怪怪的。

//the action
[MyFilter]
public ActionResult Test(string id)
{
ViewBag.MyValue = HttpContext.Items["MY_HIDDEN_VALUE"] ?? "";
return View();
}

//the filter
public class MyFilterAttribute : FilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Items["MY_HIDDEN_VALUE"] = "test";
base.OnActionExecuting(filterContext);
}
}

//the View
<input type="hidden" value="<%: ViewBag.MyValue %>" />
水牛刀刀 | 园豆:6350 (大侠五级) | 2011-12-15 15:21

我想实现的是建一个Controller的基类。在基类里面实现所有页面的二次提交check.而不需要各个Action做任何事情,更不需要在View中定义任何东西。当然controller要继承这个基类。只使用Session也是可以实现的,我现在考虑的是使用页面提交的hidden值和Session结合来实现。

所以我打算使用OnActionExecuting或者和OnActionExecuted(只使用Session控制)结合来做。不知道我这么设计有什么问题,或者你有什么好的方案。

还有OnActionExecuting在Controller里面也有虚方法提供重载,不是一定要使用filter才可以利用这个方法的。

支持(0) 反对(0) 刘鸿海 | 园豆:655 (小虾三级) | 2011-12-15 17:27

@刘鸿海: 你需要check什么?业务逻辑还是基本输入逻辑?

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2011-12-15 18:09

@水牛刀刀: check2次提交啊。就是不允许用户在提交第一次后响应还没有回来之前,再提交一次。

支持(0) 反对(0) 刘鸿海 | 园豆:655 (小虾三级) | 2011-12-15 18:26

@刘鸿海: 这种都是客户端做的啊。比如,提交后响应回来之前,提交按钮是禁用的。(你可能会说这个检查不靠谱) 但是页面检查也不靠谱的,比如,用户可以打开多个未提交的页面,然后疯狂提交……其实你只要保证服务器端是正确的就好了,你把提交按钮禁用掉,让用户不能多次提交,如果他用其他手段绕过了你的前端控制,那也无所谓,你服务器端代码是对的,他再怎么折腾也是搞自己的号。你说呢?

支持(0) 反对(0) 水牛刀刀 | 园豆:6350 (大侠五级) | 2011-12-15 18:33

@水牛刀刀: 以前的做的项目也用过客户端控制。有一些严密的系统还是客户端和服务器端都做的。但是这个项目不行,手机的项目,现在还是有很多手机不支持脚本语言的。这也是不能使用cookie的原因。

支持(0) 反对(0) 刘鸿海 | 园豆:655 (小虾三级) | 2011-12-15 21:15
0

客户端脚本不能用?那session呢?页面传值呢?

倾凡 | 园豆:216 (菜鸟二级) | 2011-12-16 11:19

session可以用。不知道你说的页面传值具体指的什么。

url参数不可以用,也不会具体改某个页面。因为是要在共同里面实现2重启动检查。不需要在具体页面中添加任何东西。

支持(0) 反对(0) 刘鸿海 | 园豆:655 (小虾三级) | 2011-12-21 11:18

@刘鸿海:话说。我不太明白你要干什么。共同是什么? 如果只是要添加hidden的话 在页面定义一个runat=“server”的DIV 或者别的,样式设置为display:none; 然后后台innerhtml赋值就行了吧。

支持(0) 反对(0) 倾凡 | 园豆:216 (菜鸟二级) | 2011-12-21 11:35

@我有我的骄傲: 首先不能改具体的页面。其次不知道你对.net MVC理解多少。mvc里面在controller中是不能直接设置控件的属性的,都是通过model或者viewdata或者tempdata.所以runat="server"也就没有什么意义了。

支持(0) 反对(0) 刘鸿海 | 园豆:655 (小虾三级) | 2011-12-21 15:18

@刘鸿海: 不能改具体的页面?是说页面不能改? div跟 controller有关系?不懂。求教?

支持(0) 反对(0) 倾凡 | 园豆:216 (菜鸟二级) | 2011-12-21 15:47
0

不就是 WebForm 中的 Post Back 嘛,自己重写一个 Hidden 就行了。

Html.MyHidden(......)

麦舒 | 园豆:452 (菜鸟二级) | 2011-12-20 22:05

是要在共同里面实现向页面中添加Hidden域,而不允许修改具体的页面。

支持(0) 反对(0) 刘鸿海 | 园豆:655 (小虾三级) | 2011-12-21 11:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册