将值附加到ViewModel List MVC

时间:2017-10-05 04:32:18

标签: javascript jquery asp.net-mvc

我正在开发MVC应用程序。我有一个主页面,点击超链接打开一个弹出窗口。

主页:

查看

<a href="#" id="CreateAddlField">Add Fields</a>

用于打开弹出窗口的Javascript代码:

$(function () {
    $('#CreateAddlField').click(function () {
        debugger;
        var Param2 = $("#Param2").val();
        var Param3 = "CreateFields";
            debugger;
            var div2 = $("#DivAddlFields");
            div2.load("/ControllerName/ActionName", { Param1: 0, Param2: Param2, Param3: Param3 }),
            div2.dialog({
                    modal: true,
                    width: 600,
                    height: 600,
                    title: "Add Fields",
                    resizable: false,
                    close: function (event, ui) {
                        location.reload();
                    }

                });

    });
});

这会加载弹出窗口。 Popup的视图有一些字段用于输入绑定到模态的值:

主要模式:

public class MainModal
{
    public List<ListModal> lstModal { get; set; }
}

public class ListModal
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
    public string Param3 { get; set; }
    public string Param4 { get; set; }
    public int Param5 { get; set; }
    public int Param6 { get; set; }
    public string Param7 { get; set; }
}

单击弹出活动中的“添加”按钮,它将返回主页面并将所有模态值发布到控制器。每次它都会更新列表并附加它。如何使List附加其值?

每次点击添加按钮时,都会调用以下javascript并返回主页面,我要在其中附加列表模型:

function AddAddlFields()
{
    var formContainer = $("#FormID");
    var vmListModal = formContainer.serialize();
    window.open("/ControllerName/ActionName?vmListModal=" + formContainer);
}

在控制器中:

public PartialViewResult ActionName(ListModal vmListModal)
{ 
    MainModal vmMaimModal = new MainModal();
    vmMaimModal.lstModal.Add(vmListModal); //This is updating the list not appending it
    return PartialView("MainPage", vmMaimModal);
}

如何将值附加到列表模式,以便我可以获取弹出活动中输入的所有值并以主页以表格形式显示?

1 个答案:

答案 0 :(得分:0)

每次操作方法在控制器中加载时,模型的先前值都会丢失,因为控制器类重新初始化并且所有类再次使用新实例创建,因此您需要将它们保存在会话中或使用单例模式。 如果类对象不为null,则此模式会阻止创建类对象的新实例。

问题在于

  MainModal vmMaimModal = new MainModal();

这个新关键字创建了对象的新实例。

示例:

Singleton Pattern

单身方法

像这样创建模型的Singleton类

 public sealed class Singleton
{

    private static MainModal MainInstance = null;

    private static readonly object padlock = new object();

    Singleton()
    {
    }



    public static MainModal MainInstance
    {
        get
        {
            lock (padlock)
            {
                if (MainInstance == null)
                {
                    MainInstance = new MainModal();
                }
                return MainInstance;
            }
        }
    }



}

在控制器中调用此类,如

  MainModal userinfo = Singleton.MainInstance;

使用会话

Storing object in session