[C#][ASP.NET] 取得 CheckBox 被勾选的 Value 值

在写 PHP 时,如果想要取得 CheckBox 被勾选的值,会把 CheckBox 的 name 后面加上中括号 [],然后在 PHP 就可以直接用 name 取出阵列。

<div>    <input type="checkbox" name="items[]" value="1" />aaa    <br />    <input type="checkbox" name="items[]" value="2" />bbb    <br />    <input type="checkbox" name="items[]" value="3" />ccc    <br />    <button type="submit">送出</button></div><?php     //此时的 $items 会是阵列,依序存放 checkbox 勾选的值    $items = $_POST["items"];?> 

但在写 ASP.NET 时发现不太一样,因为 ASP.NET 取得 POST 资料时会使用 Request.Form[""] 这个物件,而我去看了一下 Form[""] 的回传值是字串型态,所以一定不可能像 PHP 一样可以取出阵列。

public sealed class HttpRequest{    public NameValueCollection Form { get; }}public class NameValueCollection{    public string this[string name] { get; set; }}

为了求证所以做了几个小测试

1.<input type="checkbox" name="items[]"> 配合 Form["items"]

取不到 items 的值,所以我猜想在 ASP.NET 只将 items[] 当成字串而不是阵列处理。

http://img2.58codes.com/2024/20106865sAjE0jgSt8.jpg

2.<input type="checkbox" name="items[]"> 配合 Form["items[]"]

取到 items 的值了,所以证实了我的想法,而且发现被选取的值会被逗号串联在一起。

http://img2.58codes.com/2024/20106865OkFkkuZTxC.jpg

3.<input type="checkbox" name="items"> 配合 Form["items"]

CheckBox 的名称不加中括号,一样可以取的到值。

http://img2.58codes.com/2024/20106865Jvu9dYKkWO.jpg

4.<input type="checkbox" name="items" value="1,2"> 配合 Form["items"]

测试一下 value 本身包含逗号,取的到值不过这样我们无法辨别是否是多选,所以 CheckBox 的值不建议包含逗号。

http://img2.58codes.com/2024/20106865D42EQ2uNgj.jpg

整理后取值的程式码:

var items = Request.Form["items"];var itemList = string.IsNullOrWhiteSpace(items) ? new List<int>() :    items.Split(',')        .Select(it => int.Parse(it))        .ToList();

结语:
这些都是网页很基本的东西,但以往都是透过控制项,或 MVC 的模型繫结来完成,所以一直忽略这些细节的地方,现在写 ASP.NET 都尽量不用控制项,用最原始的 HTML 配合 AJAX 来完成,写起来反而觉得更清晰,更了解网页的运作模式。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章