找回密码
 会员注册
查看: 129|回复: 0

ASP.NET MVC 的表单提交

[复制链接]

1389

主题

5

回帖

496万

积分

管理员

积分
4962992
发表于 2024-2-29 08:13:50 | 显示全部楼层 |阅读模式

       ASP.NET MVC 开发过程中,我们经常要提交表单数据到后台进行处理。今天就把常见的开发过程中用到的一些数据(表单)提交的方式做一个总结,方便自己今后查阅,如果对大家有益,那就更好了,总结得不好请大家给我留言指正。

       首先我们说说不使用ASP.NET MVC 的一些特性,也不使用Jquery的Ajax做最简单的表单提交。这种表单提交只使用了HTML标签,使用html表单form的Action指向需要接收参数的Controllrt里面的Action。这时候获取表单里面的参数是通过Request.Form的形式来获取的。Request请求封装了form表单的具体细节。这个例子的代码如下:

 1.控制器

  1. public ActionResult Regist()
  2. {
  3. return View();
  4. }
  5. [HttpPost]
  6. public string Regist(string name)
  7. {
  8. string username = Request.Form["Username"];
  9. string password = Request.Form["Password"];
  10. return "Welcome:" + name;
  11. }
复制代码

2.Regist.ashtml

  1. @{
  2. Layout = null;
  3. }
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <title>Regist</title>
  8. <script src="../../Scripts/jquery-1.4.4.js" type="text/javascript"></script>
  9. <script type="text/javascript">
  10. function Submit() {
  11. $("#frmRegist").submit();
  12. }
  13. </script>
  14. </head>
  15. <body>
  16. <div>
  17. <form id="frmRegist" action="/Home/Regist" method="post">
  18. <table border="2">
  19. <tr>
  20. <th colspan="2">User Regist</th>
  21. </tr>
  22. <tr>
  23. <td>Username:</td>
  24. <td><input type="text" id="txtUsername" name="Username" /></td>
  25. </tr>
  26. <tr>
  27. <td>Password:</td>
  28. <td><input type="password" id="txtPassword" /></td>
  29. </tr>
  30. <tr>
  31. <td colspan="2"><input type="button" id="btnSubmit" value="Regist" οnclick="Submit()" /></td>
  32. </tr>
  33. </table>
  34. </form>
  35. </div>
  36. </body>
  37. </html>
复制代码

这里面我们仅仅使用了Jquery来获取form对象而已,通过document.GetElementById也可以办到,本质上来说还是可以不依赖Jquery的。

可以看到前端输入的值从后台的方法可以获取到,再进行处理就很方便了。这是最原始的表单提交方式,缺点在于如果字段很多的话,需要对每一个字段进行获取。

然后我们可以使用ASP.NET MVC 支持的模型绑定的form进行提交,模型绑定之后,我们就可以提交一个对象过去,这样就方便多了。模型绑定的控制器如下:

  1. public ActionResult Regist2()
  2. {
  3. return View();
  4. }
  5. [HttpPost]
  6. public ActionResult Regist2(User user)
  7. {
  8. return View();
  9. }
复制代码

注意,控制器这时候跟模型没关系,绑定模型的页面直接和模型打交道。

  1. @model MyMvcApp.Models.User
  2. @{
  3. Layout = null;
  4. }
  5. @using (Html.BeginForm("Regist2", "Home", FormMethod.Post))
  6. {
  7. <p>name:@Html.TextBoxFor(x => x.Name)</p>
  8. <p>email:@Html.TextBoxFor(x => x.Email)</p>
  9. <p>phone:@Html.TextBoxFor(x => x.Phone)</p>
  10. <p>gender:@Html.DropDownListFor(x=>x.Gender,new []{
  11. new SelectListItem{ Text = "boy", Value = "male", Selected = true},
  12. new SelectListItem{ Text = "girl", Value = "female", Selected = false }},"--please select gender--")</p>
  13. <p><input type="submit" id="btnSubmit" value="submit" /></p>
  14. }
复制代码

这里的模型绑定之后,输入框等跟字段就直接绑定了。运行效果如下:


接下来,我们再讨论一种以Ajax形式提交的表单,就是AjaxForm,这种form是 html的一种扩展标签。ajax提交不需要刷新的特性增强了用户体验,不失为一种好方法。

控制器代码如下:

  1. public ActionResult Regist3()
  2. {
  3. return View();
  4. }
  5. [HttpPost]
  6. public string Regist3(User user)
  7. {
  8. return "Welcome:" + user.Name;
  9. }
复制代码

页面的代码如下:

  1. @model MyMvcApp.Models.User
  2. @{
  3. Layout = null;
  4. }
  5. <script src="../../Scripts/jquery-1.4.4.js" type="text/javascript"></script>
  6. <script src="../../Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
  7. <script type="text/javascript">
  8. function OnSuccess(responseData) {
  9. $("#result").html = responseData;
  10. }
  11. </script>
  12. @using (Ajax.BeginForm("Regist3", "Home", null, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "result", OnSuccess = "OnSuccess" }))
  13. {
  14. <p>NAME:@Html.TextBoxFor(x => x.Name)</p>
  15. <p>EMAIL:@Html.TextBoxFor(x => x.Email)</p>
  16. <p>PHONE:@Html.TextBoxFor(x => x.Phone)</p>
  17. <p><input type="submit" id="btnSubmit" value="submit" /></p>
  18. }
  19. <div id="result">
  20. </div>
复制代码


运行效果就是通过Ajax请求,返回一个欢迎用户的字符串。初始界面如下:



submit之后的界面:

最后介绍通过Ajax提交的表单形式,这种形式其实不局限于表单,通常做数据的提交都可以做,这里为了演示,使用了一个表单来做例子。控制器代码如下:

  1. public ActionResult Regist4()
  2. {
  3. return View();
  4. }
  5. [HttpPost]
  6. public string Regist4(string username,string email)
  7. {
  8. return "Hello: [" + username + "] your eamil is : [" + email + "]";
  9. }
复制代码

页面代码如下:

  1. @{
  2. Layout = null;
  3. }
  4. <script src="../../Scripts/jquery-1.4.4.js" type="text/javascript"></script>
  5. <script type="text/javascript">
  6. $(document).ready(function () {
  7. $("#btnSubmit").click(function () {
  8. $.ajax({
  9. url: "/Home/Regist4",
  10. type: "POST",
  11. dataType: "JSON",
  12. data: { username: $("#txtName").val(), email: $("#txtEmail").val() },
  13. success: function (data) {
  14. //alert(data);
  15. $("#result").html("success");
  16. $("#result").css("color", "red");
  17. }
  18. });
  19. });
  20. });
  21. </script>
  22. <table border="2">
  23. <tr>
  24. <td colspan="2" align="center">User Regis Demo</td>
  25. </tr>
  26. <tr>
  27. <td>NAME:</td>
  28. <td><input type="text" id="txtName" style="width:160"/></td>
  29. </tr>
  30. <tr>
  31. <td>Email:</td>
  32. <td><input type="text" id="txtEmail" style="width:160"/></td>
  33. </tr>
  34. <tr>
  35. <td><input type="reset" id="btnReset" value = "reset" style="width:50" /></td>
  36. <td><input type="submit" id="btnSubmit" value = "submit" style="width:160"/></td>
  37. </tr>
  38. </table>
  39. <div id="result">Jquery Ajax Call Result Will Display here...</div>
复制代码


运行结果就是通过Ajax提交之后,返回结果,更新div里面的内容。


这几种形式的提交都是支持的,希望对大家有所帮助的。





来源:https://blog.csdn.net/afandaafandaafanda/article/details/41907763
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?会员注册

×
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-27 00:48 , Processed in 1.094305 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表