2014-09-02 51 views
0

AJAX調用你好:我將我的項目在asp.net,防止在MVC

基本預期行爲 - 填寫表單名稱,選擇主模塊(下拉列表),選擇子模塊(下拉列表) AJAX通過子模塊下拉的ID,創建(提交)..這將提交所有的值,

現在代碼的行爲 ----填寫表單名稱,選擇主站和子模塊,而選擇從第二個下拉子模塊調用ajax調用和創建操作被調用,所以表單名稱和masterID(從第一個下拉列表中提取)變爲空白......所以我需要防止ajax ca LL打電話給控制器Razor視圖

MyForm的

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>Form</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.FormName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.FormName) 
      @Html.ValidationMessageFor(model => model.FormName) 
     </div> 

     <select id="State" name="state"></select><br /> 
     <p> 
      <input id="sbmt" type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

我的Ajax調用

$('#State').change(function() { 
      var a = $('#State').val(); 
      var token = $('[name=__RequestVerificationToken]').val(); 
      $.ajax({ 
       url: "/form/create", 
       type: "POST", 
       data: { __RequestVerificationToken: token, 'SubID': a } 
      }); 

     }); 

我控制器

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Create(Form form, int SubID) 
     { 
      if (ModelState.IsValid) 
      { 
       form.CreatedBy = 1; 
       form.SubId = SubID; 
       form.CreatedDate = DateTime.Now; 
       form.ModifyBy = 1; 
       form.ModifyDate = DateTime.Now; 
       form.IsActive = true; 
       form.IsDeleted = false; 
       db.Forms.Add(form); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.MasterID = new SelectList(db.Departments, "MasterId", "ModuleName", form.MasterID); 
      return View(form); 
     } 
+0

」 ......我有需要形式的另一種精密組件,以被提交,請幫助我如何防止ajax調用提交值。「所以你需要提交的字段,或者你正試圖阻止字段被提交....這是什麼? – zgood 2014-09-02 15:42:23

+0

@zgood我更新了問題的人,請看看 – 2014-09-02 15:48:08

+0

我想也許你的創建動作是一個JsonResult並返回到你的頁面,而不是你現在有的RedirectToAction。 – zgood 2014-09-02 15:57:57

回答

1

從註釋中,您希望能夠在提交表單時回發選定狀態的值。最好的辦法是使用包括財產SubId視圖模型,並結合您的dropdownlist到屬性(在SubId參數你POST方法則沒有必要。

@Html.DropDownListFor(m => m.SubId, ....) 

另一種方法是控制重命名爲SubId所以它的參數相一致的POST方法

<select name="SubId" ...> 

和刪除不必要的JavaScript函數$('#State').change(function() {...

0

我猜你是使用最簡單的方法MVC的Ajax助手。改變你的形式,像這樣:

@using (Ajax.BeginForm("Create", "Home", null, new AjaxOptions { OnSuccess = "OnSuccess" })) 
{ 
... 

並在後面加上一個JavaScript處理程序的onSuccess

function OnSuccess(){ 
    alert("success"); 
} 

這是幾乎沒有的功能代碼只是爲了讓你開始。

PS。請確保您添加了對〜/ Scripts/jquery.unobtrusive-ajax.min.js的引用

+0

好吧,明白你說什麼,因爲你可以看到我的上面的代碼,我沒有成功的功能,或者我必須把所有我的ajaxy代碼進入該函數 – 2014-09-02 17:07:47

+0

Ajax MVC幫助程序不能很好地工作。最好編寫你自己的ajax調用。 Ajax幫助程序依賴於舊版本的jQuery(1.5.1),jQuery unobtrusive lib以及不再受支持的Microsoft ajax lib。它需要jQuery 1.5.1,因爲不支持的微軟ajax lib依靠'live'而不是'on' – zgood 2014-09-02 17:19:19

+0

yes以上方法不適用於我我嘗試了相同 – 2014-09-02 17:33:00