2

我正在尝试在 MVC 4 中创建一个“新建”页面。该页面将包含文本字段和下拉字段。我希望下拉框中列出的项目来自另一个模型。

主模型:(忽略语法,以下代码是通用示例)

public int MainID {get; set;}
public int location {get; set;}
...

一些细节模型:

public int detailID {get; set;}
public int MainID {get; set;}
...
public int actionID {get; set;}

行动模式:

public int actionID {get; set;}
public int location {get; set;}
public string action {get; set;}

SomeDetails携带有关的附加信息,Main并通过使用链接mainID。我有兴趣为someDetails. 此页面的一部分将包含一个下拉菜单,Action该下拉菜单基于 中的location字段main

实现下拉框的最佳方法是什么?我有一个涉及在 ViewBag 中传递可能值的解决方案,但我已经看到了这种标记为不好的做法。我也在想有可能public int actionID {get; set;}改成<List>Action. 如果执行此方法,我想我会有用于someDetails填充列表的构造函数?someDetails由于它每次都会尝试创建列表,因此在仅查看特定内容时会导致性能问题吗?

创建动作:

 public ActionResult Create(int id = -1)
    {
        if (id == -1)
        {
            //NOTE: INSERT REDIRECT HERE
        }
        someDetails model = new someDetails();
        model.MainID = id;
        return View(model);
    }

编辑:根据要求,更好地解释业务逻辑main model我所展示的模型是在一个我无法更改的现有表之后建模的,因为它是位于我的控制/组之外的数据仓库的一部分。我正在创建一个允许用户添加的应用程序,someDetails以便更好地了解/跟踪其中一些数据。该Action模型仅根据位置显示可能的操作/操作ID。

我的应用程序将允许用户从模型中搜索或过滤一组项目main。然后他们将被允许添加someDetails这将打开一个表单,其中将包含一些文本字段和一个下拉列表以选择一个操作。为了获得可能的值action,我会做类似的事情SELECT * FROM Action a WHERE a.location = currentLocation

4

1 回答 1

2

只需为每个模型创建一个带有属性的 ViewModel ......并且可以在您的控制器中填充 ViewModel,然后将其传递给视图。

编辑:对于下拉列表:

在您的 ViewModel 中,您需要一个用于所选操作 ID 的属性,以及另一个用于列表本身的属性。

在模型中:

public int actionId { get; set;}
public SelectList ListOfActions { get; set;}
//Other model members

在视图中:

@Html.DropDownListFor(model => model.actionId, Model.ListOfActions, "Select one action", new { @class = "yourclass" })

在您的控制器中:

var model = new YourViewModel();
model.ListOfActions = new SelectList(this.GetListOfActions(), "ActionName", "ActionId", [here the selected action id in case you need it])  
于 2012-12-03T18:38:09.053 回答