表单数据传递测试(Asp.Net Mvc)

很久以前,刚刚接触ASP.NET MVC的时候,学习笔记
View代码如下

<div>        
    <form method="get" action="/Home/GetIndexArg">
    <input name="tg" type="text" value="1" />
    <input name="tg" type="text" value="2" />
    <input name="tg2" type="text" value="3" />
    <input type="submit" value="提交" />
    </form>
</div>

表单数据传递测试

点完提交之后,页面传递参数是  /Home/GetIndexArg?tg=1&tg=2&tg2=3
会将Name相同的两个元素的值分别用 & 连接,而不是上次我认为的自动用 , 分隔
Controller代码如下

public void GetIndexArg(string c)//此处可以随便写参数,如果没有传过来值,就会是一个null
{
            string tg = Request.Params["tg"];  //用一个String接受两个相同Name的表单元素会自动用 , 隔开  例如此处会是  tg=1,2
            //string[] tg1 = Request.Params["tg"];    编译不通过,提示无法将String转换为String[]
            string tg2 = Request.Params["tg2"];
}

[HttpPost]    //如果不加这个,提交表单之后,会提示请求页面不明确。(两个GetIndexArg方法),就意思不会根据传递的参数多少自动重载
public void GetIndexArg(string tg2, string[] tg)  //这里可以用数组接受  
{        //如果用这个方法接受参数,tg数组将有两项 
	 //如果这个方法列表里写一个String接收相同Name的表单元素的话,只能接收到第一个Name元素值
}

总结:如果元素有相同的name,通过表单提交之后,参数会是name=value&name=value2的方式提交,而不是开始认为的name=value,value2  这种方式

这种情况的话,可以在参数列表中用数组接收(不能在方法里写,原因上面 第3个 注释 有),也可以在方法里用Request.Params的方式接受,那么系统会自动封装成用 , 隔离的参数(上面第二个注释)

但是用字符串接受的话,不能再参数列表中写,如果这样的话,就会只接收到排在前面的那个参数的值。

还有一点,就是如果方法里有两个同名方法,系统不会根据参数的多少而去自动重载某个方法,当然可以用特性来标识

如果在参数列表中写了无法接收到数据的参数,那么会赋值为null,这也解释了上面的意思,因为写多少个参数都无所谓,所以不会重载啦。

好了,写到这吧   比较清晰了,起码自己有一天再看的话能完全看懂,哈哈