视图MVC3中的强类型实体的多个实例

时间:2013-02-17 13:07:37

标签: ajax asp.net-mvc asp.net-mvc-3 jquery

我对MVC很新,所以这可能是一个非常新手的问题。我正在玩一个产品目录。我有一个产品列表,我想以表格格式(表格或div)显示。每行将显示产品信息,并有两个“编辑和删除”链接。我想使用Jquery Ajax向我的控制器提交请求。对于编辑,我想显示模态对话框。要删除,我想从目录中删除该产品。这些操作中的每一个都将在完成后更新网格。


这是一些伪代码:

型号:

 public class ProductModel
    {
        public string Name { get; set; }
        public string Description { get; set; }
        public int Id { get; set; }
        public bool IsReadOnly { get; set; }
    }

控制器:

public class ProductController : Controller
    {
        //
        // GET: /Product/

        public ActionResult Edit(ProductModel product)
        {

        }

        public ActionResult Delete(ProductModel product)
        {

        }


    }

修改视图:

@model Generic.Controller.Models.ProductModel

if Model.IsReadOnly
    Render display editor
else
    Render editor

列表视图:

@model Generic.Controller.Models.ProductModel

@using (Html.BeginForm())
{
    //for each model item
    <div class="some-css">
        <div class="column-div">
            //display the model
        </div>

        <div class="column-div">
            //display the edit link   
        </div>

        <div class="column-div">
            //display the delete link   
        </div>
    </div>
}

备用列表视图 - 从列表视图呈现的局部视图

每个模型

//:

@using (Html.BeginForm())  //id this form with the product id?
{
    //for each model item
    <div class="some-css">
        <div class="column-div">
            //display the model
        </div>

        <div class="column-div">
            //display the edit link   
        </div>

        <div class="column-div">
            //display the delete link   
        </div>
    </div>
}

这是一些骨架Javascript:

var open = function (methodName, url) {        
    $("#dialogDiv").dialog({
       buttons: {
            Save: function () {
                var form = $(options.formToPost);
                $.ajax({
                    type: "POST",

这里有什么?通常我可以:

               url: form.attr('action'),
               data: form.serialize()  

但这是否意味着每个实体的表单?

success: function (data, status, xhr) {
                    if (data.IsValid) {
                        //how do I identify the div I need to update?
                    } else {

                    }
                }
            });
        },

        Cancel: function () {
            $("#dialogDiv").dialog('close');
            $("#dialogDiv").empty();
        }
    }
});
$.ajax(
    {
        Type: methodName,
        url: url,
        success: function (data, status, xhr) {
            openDialog(data);
        }
    });

function openDialog(data) {
    $("#dialogDiv").html(data);
    $("#dialogDiv").dialog('open');
}
};

return {
    open: open
};

以下是我的问题:

  1. 现在我唯一知道如何轻松发布的是表格。我是否必须有多个表单(每个产品1个)才能将ajax请求发布到我的控制器?
  2. 如果我使用JQuery找到最接近被点击链接的div并将其发送给控制器,那么模型绑定器会自动将div的内容绑定到我的ProductModel吗?
  3. 在编辑或删除产品后更新视图的最佳方法是什么?
  4. 谢谢,

1 个答案:

答案 0 :(得分:0)

  • 使用[HttpPost]修饰您的控制器操作以进行编辑和删除,以防止编辑/删除GET请求。
  • 如果您使用模态编辑行,则每个渲染模式都需要是一个表单才能将值发布到控制器操作。
  • 每次编辑或删除后,返回RedirectToAction(“NameOfListMethod”),列表将被更新。

如果你想用jQuery处理所有事情,它会变得有点棘手,因为你需要能够在客户端更新表。