У меня есть код, который отображает dropbox со списком записей из базы данных и вызывает действие контроллера на событии change
. Контроллер берет выбранную запись в виде строки и возвращает новое представление (я думаю, что в этом моя проблема), проблема в том, что старый взгляд по-прежнему сохраняется, поскольку вновь возвращенное представление никогда не отображается.MVC3 ajax return new view
Нужно ли мне перепроектировать это или нет, следует ли насильственно уничтожить любой старый вид?
Мой код выглядит следующим образом:
EditSchool
вид:
@model namespace.Models.SchoolDetails
@{
ViewBag.Title = "EditSchool";
Layout = "~/Views/AuthorisedAdmin/_LayoutAdmin.cshtml";
}
<script src="@Url.Content("~/Scripts/chosen/chosen.jquery.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/bubble-popup-chosen-upload-functions.js")" type="text/javascript"></script>
<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 language="javascript" type="text/javascript">
$(document).ready(function() {
$("#School").change(function() {
var SelectedSchool = $('#School').val();
$.ajax({
url: '/AuthorisedAdmin/RetrieveSchool'
, type: 'POST'
, data: { School: SelectedSchool }
, success: function (data) {
}
, error: function (request, textStatus, errorThrown) {
alert(errorThrown.toString());
}
, complete: function (request, textStatus) {
}
});
});
});
</script>
<fieldset>
<legend>Select School</legend>
<div class="editor-field">
@Html.DropDownList("School", ViewBag.RegisteredSchools as SelectList, namespace.Models.Helpers.LanguageSchoolsConstants.m_sDropdownDisplayText,
new
{
id = "School",
@class = "chosen",
})
</div>
</fieldset>
@{
if (null != Model)
{
@Html.Partial("Partial/EditSchoolPartial", Model)
}
else
{
@Html.Partial("Partial/NoSchoolSelected")
}
}
Обратите внимание, что частичный вид (EditSchoolPartial
), вероятно, не является проблемой здесь, так что я не отправляя код.
методы контроллера интерес:
EditSchool
действие:
public ActionResult EditSchool()
{
List<string>kRegisteredSchools = DBHelperFunctionsSchool.Instance().GetRegisteredSchoolsNamesOnly();
ViewBag.RegisteredSchools = new SelectList(kRegisteredSchools, "Name");
SchoolDetails schoolDetails = null;//DBHelperFunctionsSchool.Instance().GetSchoolDetailsForName(kRegisteredSchools.FirstOrDefault());
return View(schoolDetails);
}
RetrieveSchool
действие (вызывается AJAX):
[HttpPost]
public ActionResult RetrieveSchool(string School)
{
SchoolDetails schoolDetails = null;
List<string> kRegisteredSchools = DBHelperFunctionsSchool.Instance().GetRegisteredSchoolsNamesOnly();
ViewBag.RegisteredSchools = new SelectList(kRegisteredSchools, "Name");
try
{
schoolDetails = new SchoolDetails();
schoolDetails.School = DBHelperFunctionsSchool.Instance().GetSchoolForName(School);
DBHelperFunctionsSchool.Instance().PopulateSchoolDetailsSuppData(schoolDetails);
schoolDetails.ActionNameToExecuteOnFormSubmit = "EditSchoolDetails";
schoolDetails.ControllerNameToExecuteOnFormSubmit = "AuthorisedAdmin";
}
catch
{
schoolDetails = null;
}
finally
{
}
return View("EditSchool", schoolDetails);
}
Вы хотите перенаправить на свой взгляд на ajax-хит вашего контроллера? – harrybvp
Да. Если вы имеете в виду, что пользователь выбирает выпадающий список, контроллер затем запрашивает выбор и возвращает новое представление с соответствующими данными выбора? Спасибо – Yos