我在使用不显眼的 ajax 从联系我们表单中发布数据时遇到问题。
我的部分视图是这样的:
@model site.ViewModel.Home.ContactUsViewModel
@using (Ajax.BeginForm("_ContactUsPartial", "Home",
new AjaxOptions { UpdateTargetId = "result" }))
{
<fieldset>
<legend>Contact Us</legend>
@Html.ValidationSummary(true)
<div id="result"></div>
<div class="editor-label">
@Html.LabelFor(m => m.FullName)
@Html.ValidationMessageFor(m => m.FullName)</div>
<div class="editor-field">@Html.TextBoxFor(m => m.FullName)</div>
<!-- other fields from model -->
<input type="submit" value="Submit"/>
</fieldset>
}
我的部分视图放置在另一个页面上,如下所示:
@Html.Partial("_ContactUsPartial", new ContactUsViewModel());
我的家庭控制器是这样的:
[HttpPost]
public ActionResult _ContactUsPartial(ContactUsViewModel viewModel)
{
if (ModelState.IsValid)
{
try
{
//send email
return Content("Thanks for your message!");
}
catch (Exception ex)
{
return Content("Problem sending the email.");
}
}
return Content("oops. invalid model");
}
我期望发生的是,当我按下提交时,控制器将返回一些文本内容,这些文本内容将被放置在 id 为“结果”的 div 中。
实际发生的情况是,当我按下提交时,我被重定向到 /Home/_ContactUsPartial,文本内容是唯一显示的内容。
我不明白这里发生了什么......我试图在网上查看示例,却发现自己更深入地挖掘了这个洞。
我确实在我的 Web.config 中启用了不显眼的 javascript,并且我还引用了 jquery.unobtrusive-ajax.min.js。
在我的 Scripts 文件夹中,我有以下可能相关的内容:
- jquery.unobtrusive-ajax.min.js
- jquery.validate.unobtrusive.min.js
- 微软MvcAjax.js
在我的 _Layout.cshtml 标记中,我声明了以下内容:
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/bootstrap.min.js")" type="text/javascript"></script>
在我的 Global.asax.cs Application_Start 我有这一行:
BundleConfig.RegisterBundles(BundleTable.Bundles);
RegisterBundles 看起来像这样:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*"));
不确定捆绑包的作用以及它们如何工作,因为我似乎已将其配置为通过此 ScriptBundle 将它们引入...但随后我也将它们手动配置在 _Layout.cshtml 的头部...
知道我做错了什么吗?我真的很感激这方面的帮助!