MVC:从客户端验证仅更新模型的一部分的操作

时间:2011-04-26 14:08:15

标签: asp.net-mvc-2 model drop-down-menu client-server client-side

这是我的问题。

我有一个由两个结构组成的模型。

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 :(得分:0)

是的,您可以使用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");
}

在客户端,您可以编写成功回调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');}
                           }
                });