0

我知道这很奇怪,但请耐心等待。我需要在我的应用程序的一部分上为表单输入设置默认状态/值。

在我的“MainController”中,我拉出一部分(或某种“包装”)页面,然后从该主页拉出部分视图。这是一个伪代码示例:

User goes to Main ->

MainController/Index Called

-> User clicks Link A ->

AJAX .load() pulls html from PartialViewA into #partialContainer

-> User clicks Link B ->

AJAX .load pulls html from PartialViewB into #partialContainer

这是 AJAX 调用:

$("#mainPanel").load('@Url.Action("GetModule","Settings")' + '?partialName=' + moduleName);

...以及处理它的相应服务器端操作:

public ActionResult GetModule(string partialName)
{
    return PartialView(partialName);
}

它对我来说非常有用,每个模块上都有很多表单字段,所有这些都可以与彼此和服务器很好地交互,所以这不是我的问题。问题是从 dbase 为部分视图中包含的表单字段设置默认值。

例如,“常规”部分有许多复选框,它们将确定应用程序的各个部分如何显示。我想从数据库中提取预先存在的布尔值,当从 GetModule() 中提取部分时,将这些值设为默认值。

我环顾四周,恐怕我将部分内容拉入主页的方式可能是问题所在。我想我可以像这样将默认值构建到构造函数中:

public class GeneralViewModel
{
    public GeneralViewModel()
    {
        var Data = from m in dataContext.Table
                   where m.UserID == _id
                   select new
                   {
                       m.Data1,
                       m.Data2,
                   };

        foreach(var setting in Data)
        {
            Checkbox1 = Convert.ToBoolean(setting.Data1); // Conversion from bool? to bool
            Checkbox2 = Convert.ToBoolean(setting.Data2); // Conversion from bool? to bool
        }
    }

    public bool Checkbox1 { get; set; }
    public bool Checkbox2 { get; set; }
}

但似乎构造函数永远不会被调用。这是有道理的,除非您考虑到我的表单字段不仅可以正确呈现,而且与数据库的通信也很好。所以问题是,我做错了什么?是我调用 Partial 的方式还是我在为我的 VM 值分配值时遗漏了一些东西?

一如既往,谢谢!

4

1 回答 1

2

我认为最好有不同的操作方法来呈现部分视图,但对于你的情况,我认为这个解决方案会起作用。

拥有一个包含其他视图模型的模型

public class ViewModel
{
    public ViewModel1 ViewModel1 { get;set;}
    public GenereViewModel General {get;set;}
}

然后在您的控制器中,您可以根据部分名称初始化视图模型。

public ActionResult GetModule(string partialName)
{
    var model = new ViewModel();
    switch (partialName)
    {
        case "General": model.General = InitializeGeneral();
                        break;
        case "ViewModel1": model.ViewModel1 = InitializeViewModel1(); break;

    }
    return PartialView(partialName, model);
}


private GeneralViewModel InitializeGeneral() 
{
   // initalize then return model

}
于 2013-11-01T19:09:18.413 回答