ASP.NET MVC表单处理

一、基础知识

HTTP请求有两种方式GET与POST,理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(query string)加到一个URL上,名字和值是一一对应的。比如说,name=lfm。在队列里,各组数据用一个&符号分开,空格用+号替换,特殊的符号转换成十六进制的代码。因为这一队列在URL里边,这样队列的参数就能看得到,可以被记录下来,或更改。通常GET方法还限制字符的大小(我测试了一下大概4083,大于4083直接被截断,不报错)。事实上POST方法可以没有限制的传递数据到服务器,用户在浏览器端是看不到这一过程的。接下来要讲的这个表单提交使用的就是post方式。

二、CheckBox

1、Html.CheckBox:这是ASP.NET MVC中提供的一个Helper,它会生成一个input-checkbox和一个同名的input-hidden,比方说我们的view为:


代码
<%using (Html.BeginForm(”HtmlCheckBox”, ”Home”))
{%>
<%=Html.CheckBox(”lfm1”) %>
<input type=”submit” value=”提交” />
<%} %>



则会生成:


代码
<form action=”/Home/HtmlCheckBox” method=”post”>
<input id=”lfm1” name=”lfm1” type=”checkbox” value=”true” />
<input name=”lfm1” type=”hidden” value=”false” />
<input type=”submit” value=”提交” />
</form>



为什么要有这么一个input-hidden呢,我们都知道checkbox在提交时如果不选中则将不被提交到服务器端,所以有时我们可能希望如

果不选中也提交到服务器端,这个input-hidden就是干这个的,不过这里实现的有点蹩脚,当选中时会有两个同名的表单项,一个值

为TRUE,一个值为FALSE。
当controller为如下时:
public ActionResult HtmlCheckBox(FormCollection formCollection)
{
return Content(Request[”lfm1”]);
}
如果选中checkbox,则得到“true,false”,如果不选中checkbox则得到“false”。如果你需要用到不选也要提交的情况可以使用

这个helper,但一般还是推荐大家直接使用<input type=”checkbox”>。

对于这个helper的使用大家可以参考如下代码:

View


代码
<%using (Html.BeginForm(”HtmlCheckBox”, ”Home”))
{%>
<%=Html.CheckBox(”lfm1”) %>
<%=Html.CheckBox(”lfm2”) %>
<%=Html.CheckBox(”lfm3”) %>
<input type=”submit” value=”提交” />
<%} %>



Controller:


代码
1 public ActionResult HtmlCheckBox(FormCollection formCollection)
2 {
3 string result = ”选中的为:”;
4 var select = from x in formCollection.AllKeys
5 where formCollection[x].Contains(”true”)
6 select x;
7 foreach (var item in select)
8 {
9 result = result + item;
10 }
11 var unSelect = from x in formCollection.AllKeys
12 where formCollection[x]==”false”
13 select x;
14 result = result + ”,未选中的为:”;
15 foreach (var item in unSelect)
16 {
17 result = result + item;
18 }
19 return Content(result);
20 }



2、<input type=”checkbox”>

我们先添加一个View:


视图
<%using (Html.BeginForm(”TestCheckBox”, ”Home”))
{%>
<input type=”checkbox” name=”lfm” value=”1” />
<input type=”checkbox” name=”lfm” value=”2” />
<input type=”checkbox” name=”lfm” value=”3” />
<input type=”checkbox” name=”lfm” value=”4” />
<input type=”checkbox” name=”lfm” value=”5” />
<input type=”submit” value=”提交” />
<%} %>



这里要注意所有的Input的name都相同,Html.BeginForm(”TestCheckBox”, ”Home”)的意思是当此表单提交的时候会提交到

HomeController的TestCheckBox这个Action方法中。我们添加这个方法:


Action
public ActionResult TestCheckBox(int[] lfm)
{
string t=””;
foreach (var item in lfm)
{
t = t + item.ToString();
}
return Content(t);
}





为了简单,TestCheckBox方法的参数名需要与input的名字相同,于是mvc自动帮我们将你选择的checkbox的value值匹配到参数数组

中,当然你可以通过Request获得,不过这样的话需要你自己进行处理。

三、RadioButton
RadioButton的用法就比较简单了,我们举个简单的例子:
View:


View
<%using (Html.BeginForm(”RadioResult”,”Home”))
{ %>
<%=Html.RadioButton(”lfm”, ”1”)%>
<%=Html.RadioButton(”lfm”, ”2”)%>
<input type=”submit” value=”提交” />
<%} %>



Controller:


代码
public ActionResult HtmlRadioButtonTest()
{
return View();
}
public ActionResult RadioResult()
{
return Content(Request[”lfm”]);
}



得到的结果就是你选中RadioButton的值。这个helper和 <input type=”radio” value=1 />版本用法是基本一样的。
四、应用

View:


代码
<h2>NewsList</h2>

<table>
<tr>

<th>
选择
</th>
<th>
Author
</th>
<th>
Title
</th>
<th>
CreateTime
</th>
</tr>
<%using (Html.BeginForm(”NewsListResult”, ”Home”))
{%>
<% foreach (var item in Model)
{ %>

<tr>

<td>
<input type=”checkbox” name=”ID” value=”<%=item.ID%>” />
</td>
<td>
<%= Html.Encode(item.Author)%>
</td>
<td>
<%= Html.Encode(item.Title)%>
</td>
<td>
<%= Html.Encode(String.Format(”{0:g}”, item.CreateTime))%>
</td>
</tr>

<% } %>
<input type=”submit” value=”提交” />
<%} %>
</table>



Controller:


代码
public ActionResult NewsList()
{
return View(ListNews.GetList());
}
public ActionResult NewsListResult(int[] ID)
{
string result = ”选中的ID”;
foreach (var item in ID)
{
result = result + ”,” + item;
}
return Content(result);

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值