防止MVC中的ajax调用

Prevent from ajax call in MVC

本文关键字:调用 ajax 中的 MVC 防止      更新时间:2023-09-26

嗨,我正在asp.net、中制作我的项目

基本预期行为--填写表单名称,选择主模块(下拉菜单),选择子模块(下拉列表),ajax传递子模块的id下拉菜单,创建(提交)。。它将提交所有值,

现在的代码是行为----填写表单名称,选择master和submodule,而从第二个下拉列表中选择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);
        }

通过注释,您希望能够在提交表单时返回所选状态的值。最好的方法是使用包含属性SubId的视图模型,并将dropdownlist绑定到该属性(这样post方法中的SubId参数就不必了。

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

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

<select name="SubId" ...>

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

我想最简单的方法是使用MVC的ajax助手。这样更改您的表单:

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

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

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

这几乎不是功能性代码,只是为了让您入门。

PS。确保添加了对~/Scripts/jquery.uno唐突-ajax.min.js 的引用