ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单实例

有时候,不得不考虑到以下场景问题:

数据库表字段会频繁更改扩展,而流行的重业务的js框架过于依赖json数据接口,导致的问题是,数据库表更改 -> 数据接口更改 -> 前段框架逻辑更改。。。

一不小心就陷入坑坑洼洼。

这样的话,原来纯ASP.NET MVC绑定的方式,还是可以一用的,因为该方式不用再为那么多js代码烦恼。

不好意思,前面自说自话啊,直接上干货代码了————

Ajax.BeginForm

@{
 Layout = null;
 var ajaxOptions = new AjaxOptions {
  UpdateTargetId = "updateHolder",
  OnBegin = "DeliverableEdit.onBegin",
  OnFailure = "DeliverableEdit.onFailure",
  OnSuccess = "DeliverableEdit.onSuccess",
  OnComplete = "DeliverableEdit.onComplete",
  HttpMethod = "Post"
 };
}
@using ( Ajax.BeginForm("Save", "DesignDeliverable", null, ajaxOptions, new { @class = "form-horizontal", id = "editForm" }) ) {
 @Html.HiddenFor(x => x.Id)
 @Html.HiddenFor(x => x.TaskCode)
 @Html.HiddenFor(x => x.ShortName)
 <div class="container-fluid pad-15">
  <div class="row">
   <div class="col-xs-6">
    <div id="updateHolder" style="display:none;"></div>
    <div class="form-group">
     <label class="col-sm-2 control-label">Title</label>
     <div class="col-sm-4">
      @Html.TextBoxFor(x => x.Name, new { @class = "form-control", placeholder = "Title" })
      @Html.ValidationMessageFor(x => x.Name)
     </div>
     <label class="col-sm-2 control-label">Type</label>
     <div class="col-sm-4">
      @Html.DropDownListFor(x => x.DeliverableType,
       new List<SelectListItem> {
            new SelectListItem { Text = "Type 1", Value = "1" },
            new SelectListItem { Text = "Type 2", Value = "2" },
            new SelectListItem { Text = "Type 3", Value = "3" },
            new SelectListItem { Text = "Type 4", Value = "4" },
            new SelectListItem { Text = "Type 5", Value = "5" },
       },
       new { @class = "form-control" })
     </div>
    </div>
    <div class="form-group">
     <label class="col-sm-2 control-label">Description</label>
     <div class="col-sm-10">
      @Html.TextAreaFor(x => x.Description, new { @class = "form-control", rows = 4 })
     </div>
    </div>
    <div class="form-group" style="margin-bottom: 3px;">
     <div class="col-sm-2 col-sm-offset-10">
      Weight
     </div>
    </div>
    <div class="form-group">
     <label class="col-sm-2 control-label">Phase</label>
     <div class="col-sm-3">
      @Html.DropDownListFor(x => x.Phase,
       new List<SelectListItem> {
            new SelectListItem { Text = "Phase 1", Value = "1" },
            new SelectListItem { Text = "Phase 2", Value = "2" },
            new SelectListItem { Text = "Phase 3", Value = "3" },
            new SelectListItem { Text = "Phase 4", Value = "4" },
            new SelectListItem { Text = "Phase 5", Value = "5" },
       },
       new { @class = "form-control" })
     </div>
     <label class="col-sm-2 control-label">First</label>
     <div class="col-sm-3">
      <input class="form-control" type="text" placeholder="" />
     </div>
     <div class="col-sm-2">
      <input class="form-control" type="text" placeholder="Weight" />
     </div>
    </div>
    <div class="form-group">
     <label class="col-sm-2 control-label">Detail</label>
     <div class="col-sm-3">
      @Html.TextBoxFor(x => x.Detail, new { @class = "form-control", placeholder = "Detail" })
      @Html.ValidationMessageFor(x => x.Detail)
     </div>
     <label class="col-sm-2 control-label">Second</label>
     <div class="col-sm-3">
      <input class="form-control" type="text" placeholder="" />
     </div>
     <div class="col-sm-2">
      <input class="form-control" type="text" placeholder="Weight" />
     </div>
    </div>
    <div class="form-group">
     <label class="col-sm-2 control-label">Size</label>
     <div class="col-sm-3">
      @Html.TextBoxFor(x => x.Size, new { @class = "form-control", placeholder = "Size" })
     </div>
     <label class="col-sm-2 control-label">Third</label>
     <div class="col-sm-3">
      <input class="form-control" type="text" placeholder="" />
     </div>
     <div class="col-sm-2">
      <input class="form-control" type="text" placeholder="Weight" />
     </div>
    </div>
    <div class="form-group">
     <label class="col-sm-2 control-label">WBS Code</label>
     <div class="col-sm-3">
      @Html.TextBoxFor(x => x.WbsNumber, new { @class = "form-control", placeholder = "WBS Code" })
     </div>
     <label class="col-sm-2 control-label">Fourth</label>
     <div class="col-sm-3">
      <input class="form-control" type="text" placeholder="" />
     </div>
     <div class="col-sm-2">
      <input class="form-control" type="text" placeholder="Weight" />
     </div>
    </div>
    <div class="form-group">
     <label class="col-sm-2 control-label">Room</label>
     <div class="col-sm-3">
      @Html.DropDownListFor(x => x.RoomId,
           (ViewBag.Rooms as List<SelectListItem>),
           new { @class = "form-control" })
     </div>
     <label class="col-sm-2 control-label">A Variance</label>
     <div class="col-sm-3">
      <input class="form-control" type="text" placeholder="A Variance" />
     </div>
    </div>
    <div class="form-group">
     <label class="col-sm-2 control-label">Area</label>
     <div class="col-sm-3">
      @Html.DropDownListFor(x => x.AreaId,
           (ViewBag.Areas as List<SelectListItem>),
           new { @class = "form-control" })
     </div>
     <label class="col-sm-2 control-label">B Variance</label>
     <div class="col-sm-3">
      <input class="form-control" type="text" placeholder="B Variance" />
     </div>
    </div>
    <div class="form-group">
     <label class="col-sm-2 control-label">Comments</label>
     <div class="col-sm-10">
      <textarea class="form-control" rows="4"></textarea>
     </div>
    </div>
   </div>
   <div class="col-xs-6">
    <div class="form-group">
     <div class="col-sm-12">
      <label class="control-label">Documents</label>
      <table class="table table-bordered table-hover table-condensed mt-10">
       <thead>
        <tr>
         <th>File Name</th>
         <th>Revision</th>
         <th>Date</th>
        </tr>
       </thead>
       <tbody>
        <tr>
         <td>P-001.pdf</td>
         <td>01</td>
         <td>03/15/2017</td>
        </tr>
       </tbody>
      </table>
     </div>
    </div>
   </div>
  </div>
 </div>
 <div class="page_footer absolute-position">
  <div class="page_footer_inner page_footer_light text-right">
   @if ( Request["action"] != "View" ) {
    <button class="btn btn-primary" id="btnSave"><i class="fa fa-floppy-o fa-fw"></i> Save</button>
   }
   <button id="btnCancel" class="btn btn-default"><i class="fa fa-close fa-fw"></i> Close</button>
  </div>
  <span id="notification"></span>
 </div>
}
<script type="text/javascript">
 var DeliverableEdit = DeliverableEdit || {};
 (function (o) {
  o.timer = null;
  o.displayLoading = function (target) {
   var element = $(target);
   kendo.ui.progress(element, true);
   o.timer = setTimeout(function () {
    kendo.ui.progress(element, false);
   }, 50);
  };
  o.hideLoading = function (target) {
   setTimeout(function () {
    clearTimeout(o.timer);
   }, 50);
  };
  o.initializeValidation = function () {
   $.validator.setDefaults({
    showErrors: function (errorMap, errorList) {
     $(".page_footer_inner button").removeProp("disabled", "disabled");
     // Clean up any tooltips for valid elements
     $.each(this.validElements(), function (index, element) {
      var $element = $(element);
      $element.data("title", "") // Clear the title - there is no error associated anymore
       .removeClass("field-validation-error")
       .tooltip("destroy");
     });
     // Create new tooltips for invalid elements
     $.each(errorList, function (index, error) {
      var $element = $(error.element);
      $element.tooltip("destroy") // Destroy any pre-existing tooltip so we can repopulate with new tooltip content
       .data("title", error.message)
       .data("placement", "bottom")
       .addClass("field-validation-error")
       .tooltip(); // Create a new tooltip based on the error messsage we just set in the title
     });
    }
   });
   $.validator.unobtrusive.parse($("#editForm"));
  };
  o.showSuccess = function (msg) {
   $("#notification").data('kendoNotification').show(msg, "success");
  };
  o.showWarning = function (msg) {
   $("#notification").data('kendoNotification').show(msg, "warning");
  };
  // Events during the submit of Ajax.Form
  o.onBegin = function () {
   $(".page_footer_inner button").prop("disabled", "disabled");
   o.displayLoading($(".form-horizontal"));
  }
  o.onSuccess = function (data) {
   o.hideLoading(o.timer);
   if (!data || !data.code) {
    o.showWarning("Failure,please try it again.");
    return;
   }
   if (data && data.code) {
    gridView.refreshGrid();
    o.showSuccess("Saved successfully.");
    setTimeout(function () {
     gridView.closeDeliverableDialog();
    }, 500);
   }
  }
  o.onFailure = function (request, error) {
   o.hideLoading(o.timer);
   o.showWarning("Failure,please try it again.");
  }
  o.onComplete = function (request, status) {
   o.hideLoading(o.timer);
   $(".page_footer_inner button").removeProp("disabled", "disabled");
  }
 })(DeliverableEdit);
 $(function () {
  // To fix jquery.validation invalid issue
  DeliverableEdit.initializeValidation();
  $("#btnCancel").click(function (e) {
   e.preventDefault();
   gridView.closeDeliverableDialog();
  });
  $("#btnSave").click(function (e) {
   e.preventDefault();
   $(".form-horizontal").submit();
   $(".page_footer_inner button").prop("disabled", "disabled");
  });
  $("#notification").kendoNotification({
   position: {
    pinned: true,
    top: 15,
    left: '50%'
   },
   autoHideAfter: 1000
  });
 });
</script>

记得引用对应的js库————

<link href="~/content/libs/bootstrap/css/bootstrap.min.css" rel="external nofollow" rel="stylesheet" type="text/css" />
 <link href="~/content/libs/fa/css/font-awesome.min.css" rel="external nofollow" rel="stylesheet" type="text/css" />
 <link href="~/content/app/css/site.css" rel="external nofollow" rel="stylesheet" type="text/css" />
 <link href="~/content/app/css/bootstrap-extend.css" rel="external nofollow" rel="stylesheet" type="text/css" />
 <link href="~/content/app/css/bootstrap-override.css" rel="external nofollow" rel="stylesheet" type="text/css" />
 <script src="~/content/libs/jquery/jquery.min.js"></script>
<script src="~/content/libs/jquery/jquery.validate-vsdoc.js"></script>
 <script src="~/content/libs/jquery/jquery.validate.js"></script>
 <script src="~/content/libs/jquery/jquery.validate.unobtrusive.js"></script>
 <script src="~/Content/libs/jquery/jquery.unobtrusive-ajax.min.js"></script>

后端代码————

[Route("~/DesignDeliverable/Edit/{id?}")]
  [HttpGet]
  public ActionResult Edit(Guid? id) {
   using ( EmpsDbContext db = new EmpsDbContext() ) {
    DesignDeliverable entity = null;
    if ( id.HasValue ) {
     entity = db.DesignDeliverables.SingleOrDefault(x => x.Id == id.Value);
    }
    else {
     entity = new DesignDeliverable();
    }
    ViewBag.Rooms = RoomFacade.GetAll().Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }).ToList();
    ViewBag.Areas = AreaFacade.GetAll().Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }).ToList();
    return View(entity);
   }
  }
  [Route("~/DesignDeliverable/Save")]
  [HttpPost]
  public JsonResult Edit(DesignDeliverable model) {
   using ( EmpsDbContext db = new EmpsDbContext() ) {
    if ( !ModelState.IsValid ) {
     return Error();
    }
    try {
     model.GroupId = new Guid("e030c300-849c-4def-807e-a5b35cf144a8"); //todo: fix this hardcode
     db.DesignDeliverables.AddOrUpdate(model);
     db.SaveChanges();
     return Success();
    }
    catch {
     //TODO: to store the exception message
    }
    return Error();
   }
  }

以上这篇ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

您可能感兴趣的文章:

  • ASP.NET MVC中的AJAX应用
  • 浅析Asp.net MVC 中Ajax的使用
(0)

相关推荐

  • 浅析Asp.net MVC 中Ajax的使用

    一.使用System.Web.Mvc.Ajax 1.1 System.Web.Mvc.Ajax.BeginForm 1.2 System.Web.Mvc.Ajax.ActionLink 二.手工打造自己的"非介入式"Javascript" 一.使用System.Web.Mvc.Ajax 1.1 System.Web.Mvc.Ajax.BeginForm 第一步:用Ajax.BeginForm创建Form @using (Ajax.BeginForm( new AjaxOpti

  • ASP.NET MVC中的AJAX应用

    一.ASP.NET MVC中的AJAX应用 首先,在ASP.NET MVC中使用自带的ajax功能,必须要导入2个js文件(顺序不能颠倒): ASP.NET MVC提供了2个常用的ajax辅助方法. Ajax.ActionLink 该辅助方法用于在页面上生成具有ajax功能的超链接. 在该辅助方法中有一个AjaxOptions类型的参数,它包括如下属性: Confirm:在发送ajax请求前,弹出确认对话框,该属性就是设置对话框中的提示消息HttpMethod:用于设置请求的类型:Get|Pos

  • ASP.NET MVC下Ajax.BeginForm方式无刷新提交表单实例

    有时候,不得不考虑到以下场景问题: 数据库表字段会频繁更改扩展,而流行的重业务的js框架过于依赖json数据接口,导致的问题是,数据库表更改 -> 数据接口更改 -> 前段框架逻辑更改... 一不小心就陷入坑坑洼洼. 这样的话,原来纯ASP.NET MVC绑定的方式,还是可以一用的,因为该方式不用再为那么多js代码烦恼. 不好意思,前面自说自话啊,直接上干货代码了---- Ajax.BeginForm @{ Layout = null; var ajaxOptions = new AjaxOp

  • Jquery基于Ajax方法自定义无刷新提交表单Form实例

    本文实例讲述了Jquery基于Ajax方法自定义无刷新提交表单Form的方法.分享给大家供大家参考.具体实现方法如下: Jquery的$.ajax方法可以实现ajax调用,要设置url,post,参数等. 如果要提交现有Form需要写很多代码,何不直接将Form的提交直接转移到ajax中呢. 以前的处理方法: 如Form代码如下: 复制代码 代码如下: <form id="Form1" action="action.aspx" method="pos

  • 告别AJAX实现无刷新提交表单

    通常对于无刷新提交表单,我们都是运用ajax实现的.前段时间跟着老大了解到另一种无刷新提交表单的方法.现在整理出来分享给大家. 第一种: (html页面) 复制代码 代码如下: <!DOCTYPE HTML><html lang="en-US"><head>    <meta charset="utf-8">    <title>无刷新提交表单</title>    <style type

  • ajax(iframe)无刷新提交表单、上传文件

    找遍资料得出结果:不能 不过同时也找到了解决办法,就是用iframe的方式来提交表单,即实现无刷新提交表单又可以上传文件! 一.HTML代码 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http

  • 发布三个ajax相关的函数,包括无刷新提交表单等

    几个月前,因为项目需求,我写了下面的三个ajax相关的函数.发布出来和大家分享.第一个是用来无刷新加载一段HTML第二个是把表单数据转换成一串请求字符串第三个是结合函数一和函数二的无刷新提交表单实现. 还有一点要提到的是,无刷新表单提交,还不能对文件上传进行处理,这个主要是因为浏览器的安全设置.目前无刷新的上传,一般是用iframe来实现的.关于这个,我们在google里搜索能找到很多. 网上虽然已经有很多优秀的ajax的类和函数了,但是或许我这几个函数对大家还有点用处,于是我就发布出来了.可以

  • php HTML无刷新提交表单

    通常对于无刷新提交表单,我们都是运用ajax实现的.前段时间跟着老大了解到另一种无刷新提交表单的方法,是利用iframe框架实现的.现在整理出来分享给大家. 第一种: html页面 <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="utf-8"> <title>无刷新提交表单</title> <style type=&quo

  • 不使用ajax实现无刷新提交表单

    HTML代码: 复制代码 代码如下: <iframe id="fra" name="frm" style="display: none;"></iframe> <form id="frm" method="post" action="@Url.Content("~/Backstage/MachineMng/RoadSet/SaveTrackRoad"

  • ASP.NET MVC项目实现三级联动无刷新

    本篇实现有关客户.订单和产品的无刷新三级联动,先看最终效果: 没有选择时,后2个Select状态为禁用: 当选择第1个Select,第2个Select可供选择,第3个Select依旧禁用: 当选择第2个Select,第3个Select可供选择: 当选择第3个Select,界面出现"显示产品信息"按钮: 当点击"显示产品信息"按钮,显示产品信息: 当点击"清空"按钮,恢复到初始状态: View Models Model之间的关系为: using S

  • AJAX PHP无刷新form表单提交的简单实现(推荐)

    ajax.php: <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <script language="javascript"> function saveUserInfo() { //获取

  • 将form表单通过ajax实现无刷新提交的简单实例

    实例如下: //将form转换为AJAX提交 function ajaxSubmit(url,frm,fn){ var dataPara=getFormJson(frm); $.ajax({ url:url, type:"post", data:dataPara, async:false, dataType:'txt', success:fn }); } //将form中的值转换为键值对 function getFormJson(frm){ var o={}; var a=$(frm)

随机推荐