您好我正在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);
}
答案 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的引用