首页 新闻 会员 周边 捐助

问个.net mvc的问题-使用checkboxfor(),在页面生成两个checkbox标签,放在表单中被提交了两次该怎么解决?

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

问个.net mvc的问题-使用checkboxfor(),在页面生成两个checkbox标签,放在表单中被提交了两次该怎么解决?

这个部分是放在form表单里的,<td> <%=Html.CheckBoxFor(m=>m.IsTop) %></td>

当我勾选之后 ,最终生成的<input name="IsTop" id="IsTop" type="checkbox" value="true" /> <input name="IsTop" type="hidden" value="false" />。

然后点击提交的时候 ,请求的时候出现了两个istop的参数,IsTop=true&IsTop=false

该如何解决这个问题呢?

http://localhost/AdminInterfaces/article?Title=&CreateDate=&ArticleColumn.Identity=&IsTop=true&IsTop=false  这个是完整的请求地址,触发action之后IsTop取的第一个,但是它把 ‘true&IsTop=false’作为了它的参数

一只小蜗牛的主页 一只小蜗牛 | 初学一级 | 园豆:50
提问于:2011-03-05 12:07
< >
分享
所有回答(3)
0

你的后台IsTop类型是bool 吗,不要用String哦,还有就是前台没有对&编码吧,如果编码也会有问题

CyBaSter | 园豆:183 (初学一级) | 2011-03-05 15:16
IsTop是bool类型的,前台没有对&编码
支持(0) 反对(0) 一只小蜗牛 | 园豆:50 (初学一级) | 2011-03-05 15:44
"但是它把 ‘true&IsTop=false’作为了它的参数"是什么意思?是bool的话应该不接这个吧,我理解错了还是怎么回事
支持(0) 反对(0) CyBaSter | 园豆:183 (初学一级) | 2011-03-05 16:52
我每次做的时候都是类似如下代码接收,前台和你的一样都可以正常接收

public ActionResult XXXX(bool isTop)
{
return View();
}
支持(0) 反对(0) CyBaSter | 园豆:183 (初学一级) | 2011-03-05 16:55
public ViewResult Index(Article article,string page)
{
.....

}
这是我的,我在这个页面上用了分页,分页项的链接地址是通过这次请求生成的,问题发生在生成超链接的地址的时候,因为提交的请求包含了两个IsTop参数,你用watch看看提交表单之后的请求内容,不是两个isTop么?
支持(0) 反对(0) 一只小蜗牛 | 园豆:50 (初学一级) | 2011-03-05 17:09
对是两个,但没关系,这是一个巧妙的设计两个反过来都不行(因为当你没选择checkbox时就返回一个false),Article是一个实体类?它有一个bool类型的IsTop?
支持(0) 反对(0) CyBaSter | 园豆:183 (初学一级) | 2011-03-05 17:28
Article是一个实体类,有bool类型的IsTop
HttpContext.Current.Request.QueryString = {Title=&CreateDate=&ArticleColumn.Identity=&IsTop=true&IsTop=false}
这是请求的内容
我生成分页链接时用的这个来获取请求的参数
NameValueCollection collection = HttpContext.Current.Request.QueryString;
string[] keys = collection.AllKeys;
for (int i = 0; i < keys.Length; i )
{
if (keys[i].ToLower() != "page")
url.AppendFormat("&{0}={1}", keys[i], HttpUtility.UrlEncode(collection[keys[i]]));
}
这个时候捕捉到四个参数 其中IsTop的值是true&IsTop=false
也就是说应该在这里处理一下,目前我是这么想的~~
支持(0) 反对(0) 一只小蜗牛 | 园豆:50 (初学一级) | 2011-03-05 17:57
你不用这样做,MVC自己会绑定的,你Article有这个属性是吧(public bool IsTop {get;set;}),那就可以了你设置一下断点你就可以看到值是true吧
支持(0) 反对(0) CyBaSter | 园豆:183 (初学一级) | 2011-03-05 18:08
它的值的确是true,但是问题出在通过request获取请求参数的时候。
暂时用个不知道是不是正规的办法先把这个问题解决了。。。
解决办法:前台添加原始的标签..
后台的action添加了个istop参数
public ViewResult Index(Article article,string page,string isTop)
{
...
//判断下,这里是为了下面取记录数时保持查询条件一致用的
if (!string.IsNullOrEmpty(isTop))
{
article.IsTop = true;
}

...
}



暂时就先这么解决的,也不知道路子正不正。。。
支持(0) 反对(0) 一只小蜗牛 | 园豆:50 (初学一级) | 2011-03-05 18:29
也许是每个人的需求不一样吧,呵呵
支持(0) 反对(0) CyBaSter | 园豆:183 (初学一级) | 2011-03-05 19:10
0

直接写客户端代码吧

程序新青年 | 园豆:841 (小虾三级) | 2011-04-08 14:40
0

Istop 有没有限制属性阿?

Jimson.Ma | 园豆:225 (菜鸟二级) | 2011-12-07 00:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册