【问题标题】:Append values to ViewModel List MVC将值附加到 ViewModel 列表 MVC
【发布时间】:2017-10-05 13:31:02
【问题描述】:

我正在开发 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; }
}

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

每次单击添加按钮时,都会调用以下 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);
}

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

【问题讨论】:

  • 每次在控制器中加载操作方法时,以前的值都会丢失,因此您需要将它们保存在会话中。
  • 我可以将 ViewModel 列表存储在会话中并在 View 中检索它吗?在那种情况下,当我提交表单时,我也会获得所有新添加的值吗?
  • 请尝试单例或使用会话。

标签: javascript jquery asp.net-mvc


【解决方案1】:

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

问题出在

  MainModal vmMaimModal = new MainModal();

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

例子:

Singleton Pattern

单例法

像这样创建模型的单例类

 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

【讨论】:

    猜你喜欢
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 2022-10-24
    • 2015-02-04
    • 2013-11-08
    相关资源
    最近更新 更多