У меня возникли проблемы с использованием ненавязчивого 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");
}
Я ожидаю, что когда я нажму «Отправить», контроллер вернет некоторый текстовый контент, который будет помещен в div с идентификатором «результат».
Что на самом деле происходит, так это то, что когда я нажимаю «Отправить», меня перенаправляют на /Home/_ContactUsPartial, при этом отображается только текстовое содержимое.
Я не понимаю, что здесь происходит... и я попытался просмотреть примеры в Интернете только для того, чтобы копнуть глубже в эту дыру.
У меня включен ненавязчивый javascript в моем Web.config, и у меня также есть ссылка на jquery.unobtrusive-ajax.min.js.
В моей папке Scripts у меня есть следующее, что может быть актуально:
- jquery.ненавязчивый-ajax.min.js
- jquery.validate.ненавязчивый.min.js
- MicrosoftMvcAjax.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....
Любая идея, что я делаю неправильно? Я был бы очень признателен за помощь в этом!
Microsoft.Unobtrusive
библиотеки удалены из проекта? Я сталкивался с этой проблемой несколько раз, и в итоге это были проблемы с библиотекой и зависимостями. - person Nomad101   schedule 04.05.2013