防止在MVC中进行ajax调用

时间:2014-09-02 15:37:26

标签: javascript jquery ajax asp.net-mvc

您好我正在asp.net中创建项目,

基本预期行为 - 填写表单名称,选择主模块(下拉列表),选择子模块(下拉列表),ajax传递子模块下拉列表,创建(提交)..它将全部提交值,

现在代码行为 ----填写表单名称,选择master和submodule,而从第二个下拉列表中选择子模块调用ajax调用,并调用create action,因此表单名称和masterID(从第一个下拉列表中提取)变为空白...所以我需要阻止ajax调用来调用控制器

剃刀视图中的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);
        }

2 个答案:

答案 0 :(得分:1)

从评论中,您希望能够在提交表单时回发所选州的值。最好的方法是使用包含属性SubId的视图模型,并将dropdownlist绑定到该属性(POST方法中的SubId参数不是必需的。

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

另一种方法是将控件重命名为SubId,使其与POST方法中的参数匹配

<select name="SubId" ...>

并删除不必要的javascript函数$('#State').change(function () {...

答案 1 :(得分:0)

我想最简单的方法就是使用MVC的ajax助手。像这样改变你的形式:

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

然后为onsuccess添加一个javascript处理程序

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

这只是为了帮助您入门而几乎不起作用的代码。

PS。确保添加对〜/ Scripts / jquery.unobtrusive-ajax.min.js的引用