2014-09-02 4 views
0

Привет я делаю мой проект в asp.net,Предотвращение от Ajax вызова в MVC

основное ожидаемое поведение - заполнить форму имя, выберите главный модуль (раскрывающийся), выберите подмодули (раскрывающийся), Аякса передает идентификатор подмодуль выпадающего списка, создать (отправить) .. он будет представлять все значения,

Теперь код ведет себя ---- заполнить имя формы, выберите мастер и подмодуль, при выборе подмодуль из второго выпадающего списка звонит вызывается вызов ajax и создается действие, поэтому имя формы и идентификатор masterID (который извлекается из первого раскрывающегося списка) пуст ... поэтому мне нужно предотвратить ajax ca Л.Л. позвонить контроллеру

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> 

Мой Аякса вызов

$('#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

»... у меня есть еще feilds в форме, которая должна быть представленным, пожалуйста, помогите мне, как я могу предотвратить вызов ajax от отправки значений ». Итак, вам нужны поля, или вы пытаетесь запретить отправку полей ... что это? – zgood

+0

@zgood я обновляю вопрос человек, пожалуйста, посмотрите –

+0

Я думаю, что, может быть, ваше действие Create должно быть JsonResult и вернуть json на вашу страницу вместо RedirectToAction, который у вас есть. – zgood

ответ

1

Из комментариев вы хотите, чтобы вы могли отправить назад значение выбранного состояния при отправке формы. Наилучший подход был бы использовать модель представления, которая включает свойство SubId и связать свой dropdownlist с этим свойством (параметр SubId в вас POST метод, то не надо.

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

альтернативы переименовать управление SubId поэтому соответствует параметру в методе POST

<select name="SubId" ...> 

и удалить ненужные JavaScript функцию $('#State').change(function() {...

0

Я думаю, самый простой способ для вас будет использовать Помощники ajax MVC. Измените форму так:

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

А потом добавить яваскрипт обработчик OnSuccess

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

Это едва функциональный код только, чтобы вы начали.

PS. Убедитесь, что вы добавили ссылку на ~/Scripts/jquery.unobtrusive-ajax.min.js

+0

хорошо понимаю, что вы говорите, поскольку вы можете видеть мой выше код, у меня нет функции успеха, или мне нужно разместить все мой код ajaxy в эту функцию –

+0

Помощник Ajax MVC не работает так хорошо. Было бы лучше написать собственный вызов ajax. Помощник Ajax полагается на старую версию jQuery (1.5.1), ненавязчивую библиотеку jQuery и Microsoft ajax lib, которая больше не поддерживается. Мне нужно jQuery 1.5.1, потому что неподдерживаемая Microsoft ajax lib полагается на 'live' вместо' on' – zgood

+0

да выше метод не работает для меня, я пробовал с тем же –

Смежные вопросы