将带有 Ajax 的表单提交到 ActionController
Submit form with Ajax to ActionController
我正在尝试向我的帐户管理员提交表格。我收到以下错误:我找遍了所有地方,似乎找不到解决方案。
1
$ 和 JQuery 未定义。
2
服务器响应 404 错误(我确定与 #1 相关)
注意:我了解我的控制器目前未设置为处理请求。我需要帮助的是尝试将请求传递到服务器。
提前感谢 Stack 的帮助!
查看:
<reference path="jquery.min.js" />
<reference path="kendo.all.min.js" />
@{
ViewBag.Title = "Register";
}
@section styles {
<link href="@Url.Content("~/Content/Views/Form.css")" rel="stylesheet" type="text/css" />
}
<script type="text/javascript">
$('#"ButtonSubmitForm"').click(function () {
submit();
}
);
</script>
<div class="middle-center">
<div class="form-center">
@{
Html.Kendo().Window()
.Name("registerForm")
.Title("UserProfileWndw")
.Draggable()
.Width(500)
.Actions(actions => { })
.Iframe(true)
.Content(
@<text>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Registration Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
</li>
<li>
@Html.LabelFor(m => m.EmailAddress)
@Html.TextBoxFor(m => m.EmailAddress)
</li>
<li>
@Html.LabelFor(m => m.OrganizationId)
@Html.DropDownListFor(m => m.OrganizationId, new SelectList(ViewBag.Organizations, "OrganizationId", "Name"), string.Empty)
</li>
</ol>
<input type="submit" id="ButtonSubmitForm" value="Add user" class="k-button" />
<!-- clear button-->
<!-- cancel button-->
</fieldset>
}
</text>
).Render();
}
</div>
</div>
function submit() {
$(document).ready(function(){
var form = $("#registerForm");
$.ajax({
cache: false,
async: true,
type: "POST",
url: "Account/AdminReg/",
data: form.serialize(),
success: function (data) {
alert(data);
}
});
}
)
}
</script>
控制器:
public ActionResult AdminReg(Register model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Organization_OrganizationId = model.OrganizationId, IsApproved = false, EmailAddress = model.EmailAddress }, true);
// add user to org user group if specified
Organization org = db.Organizations.Include("Groups").Include("Groups.Members").SingleOrDefault(o => o.OrganizationId == model.OrganizationId);
if (org != null)
{
UserProfile newUser = db.UserProfiles.Single(u => u.UserName == model.UserName);
org.Groups.Single(g => g.Name == "Users").Members.Add(newUser);
db.SaveChanges();
}
if (User.IsInRole("Admin") || User.IsInRole("Administrators"))
{
return RedirectToAction("ReadUsers", "UserManagement");
}
//WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("RegistrationSuccessful", "Account");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
return PartialView("UserAddAdminTemplate");
}
您似乎没有正确包含 jquery。相反,参考尝试包含在您的视图中:
<script src="~/Scripts/jquery.min.js"></script>
其中“~/Scripts/jquery.min.js”是 jquery 库的路径。
查看您的 bundleconfig 并检查那里是否引用了 Jquery。
这是一个例子:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*",
));
还要检查您的默认共享布局页面并确保它们已呈现(尝试 post 在页面末尾呈现它们)
这是一个例子:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
您没有包含 jquery 文件(<reference path="jquery.min.js" />
不够)。按照 Osadellah 的回答,使用 @Scripts.Render("~/bundles/jquery")
添加它们。
然后将 $('#ButtonSubmitForm').click(function () { ...});
移动到页面底部(或包裹在 $(document).ready()
中),因为在您当前呈现脚本时该按钮不存在。
最后,总是 使用 UrlHelper 构建您的 url(您缺少 url 中的前导 /
)。
@Scripts.Render("~/bundles/jquery") // or <script src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript"> // immediately before the closing body tag
var form = $("#registerForm");
var url = '@Url.Action("AdminReg", "Account");
$('#ButtonSubmitForm').click(function() {
$.post(url, form.serialize(), function(data) {
alert(data);
});
});
</script>
</body>
我正在尝试向我的帐户管理员提交表格。我收到以下错误:我找遍了所有地方,似乎找不到解决方案。
1
$ 和 JQuery 未定义。
2
服务器响应 404 错误(我确定与 #1 相关)
注意:我了解我的控制器目前未设置为处理请求。我需要帮助的是尝试将请求传递到服务器。
提前感谢 Stack 的帮助!
查看:
<reference path="jquery.min.js" />
<reference path="kendo.all.min.js" />
@{
ViewBag.Title = "Register";
}
@section styles {
<link href="@Url.Content("~/Content/Views/Form.css")" rel="stylesheet" type="text/css" />
}
<script type="text/javascript">
$('#"ButtonSubmitForm"').click(function () {
submit();
}
);
</script>
<div class="middle-center">
<div class="form-center">
@{
Html.Kendo().Window()
.Name("registerForm")
.Title("UserProfileWndw")
.Draggable()
.Width(500)
.Actions(actions => { })
.Iframe(true)
.Content(
@<text>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary()
<fieldset>
<legend>Registration Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password)
</li>
<li>
@Html.LabelFor(m => m.ConfirmPassword)
@Html.PasswordFor(m => m.ConfirmPassword)
</li>
<li>
@Html.LabelFor(m => m.EmailAddress)
@Html.TextBoxFor(m => m.EmailAddress)
</li>
<li>
@Html.LabelFor(m => m.OrganizationId)
@Html.DropDownListFor(m => m.OrganizationId, new SelectList(ViewBag.Organizations, "OrganizationId", "Name"), string.Empty)
</li>
</ol>
<input type="submit" id="ButtonSubmitForm" value="Add user" class="k-button" />
<!-- clear button-->
<!-- cancel button-->
</fieldset>
}
</text>
).Render();
}
</div>
</div>
function submit() {
$(document).ready(function(){
var form = $("#registerForm");
$.ajax({
cache: false,
async: true,
type: "POST",
url: "Account/AdminReg/",
data: form.serialize(),
success: function (data) {
alert(data);
}
});
}
)
}
</script>
控制器:
public ActionResult AdminReg(Register model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Organization_OrganizationId = model.OrganizationId, IsApproved = false, EmailAddress = model.EmailAddress }, true);
// add user to org user group if specified
Organization org = db.Organizations.Include("Groups").Include("Groups.Members").SingleOrDefault(o => o.OrganizationId == model.OrganizationId);
if (org != null)
{
UserProfile newUser = db.UserProfiles.Single(u => u.UserName == model.UserName);
org.Groups.Single(g => g.Name == "Users").Members.Add(newUser);
db.SaveChanges();
}
if (User.IsInRole("Admin") || User.IsInRole("Administrators"))
{
return RedirectToAction("ReadUsers", "UserManagement");
}
//WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("RegistrationSuccessful", "Account");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
return PartialView("UserAddAdminTemplate");
}
您似乎没有正确包含 jquery。相反,参考尝试包含在您的视图中:
<script src="~/Scripts/jquery.min.js"></script>
其中“~/Scripts/jquery.min.js”是 jquery 库的路径。
查看您的 bundleconfig 并检查那里是否引用了 Jquery。 这是一个例子:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*",
));
还要检查您的默认共享布局页面并确保它们已呈现(尝试 post 在页面末尾呈现它们) 这是一个例子:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
您没有包含 jquery 文件(<reference path="jquery.min.js" />
不够)。按照 Osadellah 的回答,使用 @Scripts.Render("~/bundles/jquery")
添加它们。
然后将 $('#ButtonSubmitForm').click(function () { ...});
移动到页面底部(或包裹在 $(document).ready()
中),因为在您当前呈现脚本时该按钮不存在。
最后,总是 使用 UrlHelper 构建您的 url(您缺少 url 中的前导 /
)。
@Scripts.Render("~/bundles/jquery") // or <script src="~/Scripts/jquery-1.9.1.js"></script>
<script type="text/javascript"> // immediately before the closing body tag
var form = $("#registerForm");
var url = '@Url.Action("AdminReg", "Account");
$('#ButtonSubmitForm').click(function() {
$.post(url, form.serialize(), function(data) {
alert(data);
});
});
</script>
</body>