У меня есть главная страница индекса, которая загружает частичное представление, содержащее раскрывающийся список. Выбор элемента из ddl заполняет элементы управления в отдельном частичном представлении для отображения. При нажатии кнопки «Изменить» открывается модель с формой редактора для элементов управления, привязанных к свойствам модели для выбранного элемента. Когда нажата кнопка отправки для модального окна. Он отправляет обратно форму для обновления в базу данных ... и в этот момент я хочу в основном обновить частичное представление, содержащее раскрывающийся список, чтобы он отражал соответствующие изменения.
Код, который у меня есть, выполняет все основные механизмы без проблем, ЗА ИСКЛЮЧЕНИЕМ обновления частичного представления, содержащего раскрывающийся список для управления. Я мог бы просто выполнить перенаправление для страницы индекса и обновить всю страницу, но я бы предпочел обновить только частичное представление. Я не могу понять, как это сделать, и мне интересно, есть ли у кого-нибудь предложения.
Код div для страницы индекса:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<br />
<div class="partialContent" data-url="/Database/GetDatabases">
@Html.Partial("_GetDatabases")
</div>
<br />
<div class="modal fade" id="modalEditDBInfo" role="application" aria-labelledby="modalEditDBInfoLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modalEditDBInfoContent" style="background-color:white; border-radius:10px; box-shadow:10px;">
@Html.Partial("_EditDatabaseInfo")
</div>
</div>
</div>
Код для частичного представления EditDatabase
@model Hybridinator.WebUI.Models.DatabaseModel
<br />
<br />
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="editModelTitle">Edit Database Info</h4>
</div>
@if(Model != null)
{
using (Html.BeginForm("EditDatabaseInfo", "Database", FormMethod.Post, new { @class = "modal-form" }))
{
<div class="modal-body">
@Html.HiddenFor(m => m.database_pk, new { htmlAttributes = new { @class = "form-control" } })
<div class="form-group">
<div id="databaselabel">@Html.LabelFor(m => m.database_name, "Database")</div>
<div id="databaseedit">@Html.EditorFor(m => m.database_name, new { htmlAttributes = new { @class = "form-control" } })</div>
</div>
<div class="form-group">
<div id="databaseserverlabel">@Html.LabelFor(m => m.database_server, "Database Server")</div>
<div id="databaseserveredit">@Html.EditorFor(m => m.database_server, new { htmlAttributes = new { @class = "form-control" } })</div>
</div>
</div>
<div class="form-group">
<div id="editsqltypelabel">@Html.LabelFor(m => m.sql_type_pk, "Sql Type")</div>
<div id="editsqltypeddl">@Html.DropDownListFor(m => m.sql_type_pk, Model.sqlTypes)</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button class="btn btn-inverse btn-primary" type="submit">Save</button>
</div>
}
}
Код для частичного просмотра GetDatabases
@model Hybridinator.WebUI.Models.DatabaseListModel
@if(Model != null)
{
<div id="databasedropdown" class="container-fluid">
@Html.Label("Databases: ")@Html.DropDownListFor(m => m.database_pk, Model.databases, "Select one...", new { @id = "database_pk", onchange = "changeDatabase()" })
</div>
}
Код контроллера для GetDatabases
public ActionResult GetDatabases()
{
DatabaseListModel databaseListModel = new DatabaseListModel
{
databases = databaseService.GetUndeletedDatabaseList().
Select(d => new SelectListItem
{
Value = d.database_pk.ToString(),
Text = d.database_name
}).ToList()
};
return PartialView("_GetDatabases",databaseListModel);
}
и последний код для Get и Post для модального окна EditDatabase
[HttpGet]
public ActionResult EditDatabaseInfo(int database_pk)
{
DatabaseModel databaseModel = FillDatabaseModelByDatabasePK(database_pk);
return PartialView("_EditDatabaseInfo", databaseModel);
}
[HttpPost]
public ActionResult EditDatabaseInfo(DatabaseModel databaseModel)
{
string[] result = databaseService.Update(new Database
{
database_pk = databaseModel.database_pk,
database_name = databaseModel.database_name,
database_password = databaseModel.database_password,
database_username = databaseModel.database_username,
database_server = databaseModel.database_server,
hist_database_name = databaseModel.hist_database_name,
hist_database_server = databaseModel.hist_database_server,
hist_database_password = databaseModel.hist_database_password,
hist_database_username = databaseModel.hist_database_username,
sqlType = new SQLType { sql_type_pk = databaseModel.sql_type_pk }
});
return RedirectToAction("GetDatabases");
}
Как я уже сказал, RedirectToAction ("Index), возвращаемый в методе контроллера Post EditDatabase, работает в крайнем случае ... но я действительно не хочу обновлять всю страницу. Я предполагаю, что есть кое-что, что я могу сделать по-другому, вернув этот метод просто перезагрузить часть GetDatabases, но я не могу понять. Любая помощь будет принята с благодарностью.