#asp.net-mvc-2 #model #drop-down-menu #client-server #client-side
#asp.net-mvc-2 #Модель #выпадающее меню #клиент-сервер #на стороне клиента
Вопрос:
Это моя проблема.
У меня есть модель, состоящая из двух структур.
public class MyDoubleStructureModel
{
public MyDoubleStructureModel(CLIENT MyClient, List<PROVIDER> MyProviders);
CLIENT MyClient {get;private set;};
List<PROVIDER> MyProviders {get;private set;} ;
}
Два объекта загружаются в начале загрузки страницы.
Объект «MyProviders» заполняет RenderPartial :
<div id="dialog">
<% Html.RenderPartial("UCProviders", Model.MyProviders); %>
<%} %>
</div>
В моей клиентской форме у меня есть выпадающий список, который должен позволить пользователю обновлять данные, включенные в частичное представление.
Она должна быть обновлена без перезагрузки представления.
Моя идея состояла в том, чтобы вызвать (например, через jQuery) функцию на стороне сервера, которая обновила бы только одну часть моей модели.
$("#ddlChangeProviders").change(function() {
$.ajax({
type: "POST",
url: "/Client/UpdateListProvider/?provID=" $("#ddlChangeProviders").val()
});
Но я не знаю, возможно ли обновить только часть моей модели (в данном случае часть «поставщики»).
Есть идея дополнить мой код? Я на правильном пути? Я полагаю, что отсутствует только «функция на стороне сервера «UpdateListProvider» (отображение обновленного списка поставщиков в PartialView)…
Это то, что должно быть в моей функции UpdateListProvider
public ActionResult UpdateListProvider(int provID)
{
List<PROVIDER> MyProvidersInMyModel = _entities.Providers.Where(c => c.PROV_ID == provID).ToList();
var model = new MyDoubleStructureModel(null, MyProvidersInMyModel)
return View(model);
}
Спасибо за вашу помощь.
(Спросите меня, если описание недостаточно четкое)
Ответ №1:
да, вы можете обновлять части своей модели с помощью jquery, а также с помощью обычной формы post. теперь вам просто нужно написать UpdateListProvider ActionResult и обновить поле providerId вашей модели. вы можете дополнительно возвращать true или false, показывая, что данные обновлены успешно или нет
public ActionResult UpdateListProvider(int porvID)
{
var model = //get model to update
model.provID = provID
if(Save(model))return Content("true");
return Content("false");
}
на стороне клиента вы можете написать обратный вызов ajax для отображения сообщения об ошибке или успешном завершении
$("#ddlChangeProviders").change(function() {
$.ajax({
type: "POST",
url: "/Client/UpdateListProvider/?provID=" $("#ddlChangeProviders").val(),
success:function(data)
{
if(data == 'true'){alert('updated successfully');}
else{alert('could not update record');}
}
});
Комментарии:
1. Спасибо за ваш ответ. Не могли бы вы подробнее описать «var model = // Получить модель для обновления»?
2. поскольку ваша цель — обновить модель. итак, когда у вас есть provID в методе action, вам просто нужно извлечь рассматриваемую модель из базы данных и т.д. И обновить ее поле provID. вы также можете передать уникальный идентификатор вашей модели в своем ajax-запросе, чтобы вы могли легко получить объект модели из базы данных
3. Что ж, я собираюсь задать по-другому свой предыдущий вопрос, который, возможно, кажется слишком простым, чтобы быть правдой :)) : какова строка кода, которая может использовать (и заполнять) «текущую модель» текущей формы? ‘Полный’ код строки: ‘var model = //получить модель для обновления’?
4. если вы можете вставить код вашего ActionResult, который отображает форму. я буду в лучшем положении, чтобы ответить на этот вопрос, и, пожалуйста, отредактируйте этот вопрос, чтобы вставить код, а не использовать комментарии
5. Хорошо, я обновил свой первоначальный пост 🙂 Надеюсь, это поможет. Кстати, спасибо тебе за твою помощь, Мухаммад.