使用“不同”视图中的数据更新模型 - MVC

时间:2012-02-29 05:35:32

标签: c# asp.net-mvc-3

如何将新对象项添加到已在其他模型中创建的主视图模型中?

我正在尝试将新项添加到主视图模型中包含的列表中。

在添加此项之前,我需要有关此项的属性的信息,因此我使用与包含必要输入字段的模型紧密相关的视图。我已经为这个视图创建了一个包含两个对象的包装器样式。主视图的模型以及特定项目的模型。

MODEL

public class MDTCompletedJobM : BaseM
{
...
public MDTPartMList PartsList { get; set; }
...
}


public class MDTAddPartM
{
    public MDTPartM Part { get; set; }
    public MDTCompletedJobM CompletedJobM { get; set; }
    public List<string> PartTypes { get; set; }

    public MDTAddPartM()
    {
        Part = new MDTPartM();
        PartTypes = (List<string>)ConfigurationManager.GetSection("MTDataPartTypeList");
    }
}

因此,当从我的控制器调用视图时,我将我的主视图模型分配给此模型并将其传入。从“添加部件”视图,然后我使用Ajax调用实际将部件添加到此列表(CompletedJobM.PartsList)。

这个工作正常,但我现在不知道如何让我的主视图在它的模型中知道它的列表中有一个额外的项目。在将新项目添加到模型列表后,它不会“存储”在任何位置,因此我无法重新加载主视图模型。我的Ajax帖子是:

 $.ajax({
            type: "POST",
            cache: false,
            url: '@Url.Action("AddPart", "Jobs")', //$(this).attr("action"),
            data: $.toJSON(result),
            contentType: 'application/json',
            success: function (data) {

                $("#progressdiv").html();

                var isValid = $(data).find(".validation-summary-errors").length == 0;

                if (isValid) {
                    var pwindow = $("#Window").data("tWindow");
                    pwindow.close();
                    $('.page').html(data); <- what to do here?
                }
                else {

                    $("#resultDiv").html(data);
                }
            },

            beforeSend: function () {
                $("#progressdiv").html('<image src=@Url.Content("~/Content/Images/ajax-loader.gif") alt="Loading, please wait" />');
            },

            error: function (xhtr, e) {
                $("#progressdiv").html();
                alert(xhtr.responseText);
            }
        });

目前(因为我正在返回一个视图)我尝试将返回的HTML分配给主视图的标记,但这会导致重叠显示和按钮点击等进一步处理问题。

我的问题出在顶线?也许我已经错了?

由于

修改

好的,让我稍微改一下这个问题。忽略我的实际代码。有人使用什么原则或一般概念来使用不同视图(条目表单)中的模型更新一个View的模型(在本例中为列表),以便在刷新主视图时包含来自第二个视图的信息请记住,在第二个视图更新/发布后,它不会写入数据库或任何地方。它在内存中有效

由于

2 个答案:

答案 0 :(得分:1)

我最终做的是将我的模型存储在Session对象中并检索它并在重新呈现页面时使用它。

答案 1 :(得分:0)

所以,如果我理解正确的话:

  1. 您的主视图的模型具有PartsList
  2. 您的“添加零件”视图会发出ajax请求,要求将新项目添加到PartsList(但不会将其存储在数据库中......那么它在做什么?)
  3. 没有任何内容存储在数据库中
  4. 我认为这里的问题是设计。主视图最初如何获得它的部件列表?或者它是否从空开始,并使用“添加零件”添加零件?

    说实话,我看到两个选项:

    1. 重新设计应用程序,以便主视图从数据库中读取PartsList,“添加部件”将项目添加到数据库。这样,在您的ajax调用之后,您可以刷新主视图。
    2. 保持状态客户端:这可以是隐藏的输入,您将部件列表存储为逗号分隔的字符串,并使用一些javascript来保持添加部分和主视图同步。凌乱但可行。
    3. 我非常倾向于#1。