MVC: действие по обновлению только части модели из проверки на стороне клиента - PullRequest
0 голосов
/ 26 апреля 2011

Это моя проблема.

У меня есть модель, состоящая из двух структур.

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 Ответ

0 голосов
/ 26 апреля 2011

да, вы можете обновить части вашей модели, используя jquery, а также с помощью обычной формы публикации. теперь вам просто нужно написать 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");
}

на стороне клиента вы можете написать callback 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');}
                           }
                });
...