在上一篇介绍MVC中的Ajax实现方法的时候,曾经提到了除了使用Ajax HTML Helper方式来实现之外,Jquery也是实现Ajax的另外一种方案。

通过get方法实现AJax请求

View

  1. <script type="text/javascript">
  2. function GetTime() {
  3. $.get("Home/GetTime", function (response) {
  4. $("#myPnl").html(response);
  5. });
  6.  
  7. return false;
  8. }
  9. </script>
  10. <div id="myPnl" style="width: 300px; height: 30px; border: 1px dotted silver;">
  11. </div>
  12. <a href="#" onclick="return GetTime();">Click Me</a>

Controller

  1. public ActionResult GetTime()
  2. {
  3. return Content(DateTime.Now.ToString());
  4. }

通过post方法实现Form的Ajax提交

View

  1. @model MvcAjax.Models.UserModel
  2. @{
  3. ViewBag.Title = "AjaxForm";
  4. }
  5. <script type="text/javascript">
  6. $(document).ready(function () {
  7. $("form[action$='SaveUser']").submit(function () {
  8. $.post($(this).attr("action"), $(this).serialize(), function (response) {
  9. $("#myPnl").html(response);
  10. });
  11.  
  12. return false;
  13. });
  14. });
  15.  
  16. </script>
  17. <div id="myPnl" style="width: 300px; height: 30px; border: 1px dotted silver;">
  18. </div>
  19. @using (Html.BeginForm("SaveUser", "Home"))
  20. {
  21. <table>
  22. <tr>
  23. <td>
  24. @Html.LabelFor(m => m.UserName)
  25. </td>
  26. <td>
  27. @Html.TextBoxFor(m => m.UserName)
  28. </td>
  29. </tr>
  30. <tr>
  31. <td>
  32. @Html.LabelFor(m => m.Email)
  33. </td>
  34. <td>
  35. @Html.TextBoxFor(m => m.Email)
  36. </td>
  37. </tr>
  38. <tr>
  39. <td>
  40. @Html.LabelFor(m => m.Desc)
  41. </td>
  42. <td>
  43. @Html.TextBoxFor(m => m.Desc)
  44. </td>
  45. </tr>
  46. <tr>
  47. <td colspan="2">
  48. <input type="submit" value="Submit" />
  49. </td>
  50. </tr>
  51. </table>
  52. }

Model

  1. using System.ComponentModel.DataAnnotations;
  2.  
  3. namespace MvcAjax.Models
  4. {
  5. public class UserModel
  6. {
  7. [Display(Name = "Username")]
  8. public string UserName { get; set; }
  9.  
  10. [Display(Name = "Email")]
  11. public string Email { get; set; }
  12.  
  13. [Display(Name = "Description")]
  14. public string Desc { get; set; }
  15. }
  16. }

Controller

  1. [HttpPost]
  2. public ActionResult SaveUser(UserModel userModel)
  3. {
  4. //Save User Code Here
  5. //......
  6.  
  7. return Content("Save Complete!");
  8. }

以上代码实现了Jquery POST提交数据的方法。

通过查看以上两种Jquery方式的Ajax实现方法,和之前AJax HTML Helper比较可以发现其实Controller都是相同的。

采用Jquery方式提交数据的的主要实现方案就是通过Jquery的get或者post方法,发送请求到MVC的controller中,然后处理获取的response,更新到页面中。

注意点:

无论是使用超链接和form方式来提交请求,javascript的方法始终都有一个返回值false,用来防止超链接的跳转或者是form的实际提交。

这个地方就会出现一个疑问:

如果针对该页面禁止了Javascript脚本,那么该页面就是跳转或者是form就是提交,返回的ActionResult处理就会出现问题了。

这个时候就需要在Controller中判断该请求是否是Ajax请求,根据不同的情况返回不同的ActionResult:

  1. [HttpPost]
  2. public ActionResult SaveUser(UserModel userModel)
  3. {
  4. //Save User Code Here
  5. //......
  6.  
  7. if (Request.IsAjaxRequest())
  8. return Content("Save Complete!");
  9. else
  10. return View();
  11. }

C#_MVC_ajax for form的更多相关文章

  1. form表单验证-Javascript

    Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...

  2. Form 表单提交参数

    今天因为要额外提交参数数组性的参数给form传到后台而苦恼了半天,结果发现,只需要在form表单对应的字段html空间中定义name = 后台参数名 的属性就ok了. 后台本来是只有模型参数的,但是后 ...

  3. s:form标签

    2017-01-07 17:43:18 基本的用法 <!-- Action类必须有一个无参的构造器,因为在执行action方法之前,拦截器已经创建了一个"空"的Action对 ...

  4. ASP.NET Aries JSAPI 文档说明:AR.Form、AR.Combobox

    AR.Form 文档 1:对象或属性: 名称 类型 说明 data 属性 编辑页根据主键请求回来的数据 method 属性 用于获取数据的函数指向,默认值Get objName 属性 用于拦截form ...

  5. form表单 ----在路上(15)

    form 表单就是将用户的信息提交到服务器,服务器会将信息存储活着根据信息查询数据进行增删改查,再将其返回给用户. 基本格式: <form action="" method ...

  6. 了解HTML表单之form元素

    前面的话 表单是网页与用户的交互工具,由一个<form>元素作为容器构成,封装其他任何数量的表单控件,还有其他任何<body>元素里可用的标签 表单能够包含<input& ...

  7. form表单的字符串进行utf-8编码

    <form>表单有assept-charset属性.该属性规定字符的编码方式,默认是"unknown",与文档的字符集相同. 该属性除了Internet explore ...

  8. js Form.elements[i]的使用实例

    function pdf(){    //一个html里面可能存在多个form,所以document.form[0]指的是第一个form,document.form[1]返回就是第二个form,如果没 ...

  9. PHP跨域form提交

    因为安全性因素,直接跨域访问是不被允许的. 1.PHP CURL方式 function curlPost($url,$params) { $postData = ''; foreach($params ...

随机推荐

  1. 真机无法接收到android.provider.Telephony.SMS_RECEIVED的问题

    小米2S有一个设定会导致,App无法接收到android.provider.Telephony.SMS_RECEIVED广播. 解决方案 关闭系统短信优先设置 短信-设置-高级设置-系统短信优先   ...

  2. Imageview使用记录

    1. imageView清除背景 原文网址:http://blog.csdn.net/lzq1039602600/article/details/40393591 两种清除 imageView的背景 ...

  3. iframe的使用小贴士

    1.之前又说到“根据内容计算iframe的高度” 链接 2.现在想说的是,一般iframe页面都是嵌套在父页面当中,所以在一般在iframe里面做相关动作时默认都是iframe页面的,不会影响到父页面 ...

  4. (十三)学习CSS之两个class连一起隔空格和逗号

    1.时常见到css的这两种种写法: a.两个class隔空格连一起: .class1 .class2{......} b.两个class隔逗号连一起: .class1,.class2{......} ...

  5. python编译以及反编译

    在Python2.3之前Python自带反编译的工具,高版本的貌似这个反编译的已经不能用了. 据说是在Python2.7上最好用的反编译工具uncompyle 代码地址 http://github.c ...

  6. 查询Table name, Column name, 拼接执行sql文本, 游标, 存储过程, 临时表

    018_Proc_UpdateTranslations.sql: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO if (exists (select ...

  7. selenium运行chrome去掉command -line flag

    每次驱动chrome浏览器都会出现这玩意,比较烦人··想办法去掉了它: ChromeOptions options = new ChromeOptions();options.addArguments ...

  8. linux下Qt问题cannot find -lGL collect2: error: ld returned 1 exit status

    fedora下解决 yum groupinstall "Development Tools" yum install mesa-libGL-devel ubuntu下解决 sudo ...

  9. 多线程与网络之cookies

    1. 网络请求中的cookie 1.1 删除cooki NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCook ...

  10. zoj 1670 Jewels from Heaven

    题意:三个人,在给定正方形内,求第一个人拿到珠宝的概率.珠宝随机出现在正方形内. 思路:中垂线+半平面相交. #include<cstdio> #include<cstring> ...