试图访问List<>来自Html.DropDownListFor()的属性

时间:2016-11-18 20:00:34

标签: c# asp.net-mvc

可能我这样做的方式不对,但这是我正在处理的代码示例:

视图模型

public class TasDataView
{
    public int nTas { get; set; }
    public string codTas { get; set; }
    public decimal nValue { get; set; }
    public bool nState { get; set; }
    public System.DateTime nDate { get; set; }
    public IEnumerable<Segments> ListSegments { get; set; }
    public IEnumerable<Tas> ListTas { get; set; }
}

细分类

public class Segments
{
    public int segmentValue { get; set; }
    public string segmentCode { get; set; }
    public bool nState { get; set; }
    public System.DateTime nDate { get; set; }
}

因此,当我使用我的控制器调用View时,我发送一个TasDataView对象作为参数:

public ActionResult AddTas()
    {
        TasDataView TDV = new TasDataView();
        SegmentsManager SM = new SegmentsManager();

        TDV.ListSegments = SM.DataSegments();

        return View(TDV);
    }

这就是我面临的问题。我需要ViewModel的所有值才能使此View工作。所以,例如,我有:

@model Project.Models.ViewModel.TasDataView
@Html.EditorFor(model => model.nValue, new { htmlAttributes = new { @class = "form-control" } })

这将创建用于将任何我想要的内容插入到nValue中的框。但是,如果我想访问我发送给View的ListSegments属性(来自Segments类),那么我可以创建一个DropDown列表呢?

我做不了类似的事情:

@Html.DropDownListFor(x => x.ListSegments.segmentValue, new SelectList(Model.ListSegments));

因为所有ListSegments(如segmentValue)属性&#34;都不在&#34; TasDataView,但在Segments类中。

如何重新组织我的DataView以便根据我的需要进行管理?而不是List&lt;&gt;而不是我应该有简单的变量吗?

1 个答案:

答案 0 :(得分:0)

我猜你做错了。 DropDownListFor的第一个参数是一个表达式,表示模型的属性,该属性接收在下拉列表中选择的项的值。它必须是模型上某处的一些奉献= d属性。例如selectedSegment。

修改 因此,如果您的目标是在下拉列表中通过模型向用户显示值列表并让用户选择值,则需要:

  1. 在模型上具有存储所选项目(段)的属性,例如, selectedSegment,
  2. 将您的细分正确呈现为字符串以显示它们。
  3. 下面给出了最简单的解决方案。

    public class TasDataView
    {
        public int nTas { get; set; }
        public string codTas { get; set; }
        public decimal nValue { get; set; }
        public bool nState { get; set; }
        public System.DateTime nDate { get; set; }
        public IEnumerable<Segments> ListSegments { get; set; }
        public IEnumerable<Tas> ListTas { get; set; }
        public Int32 selectedSegment;
    }
    
    @Html.DropDownListFor(x => x.selectedSegment, new SelectList(Model.ListSegments.Select(s => s.segmentCode)));
    

    因此,您无需访问列表的属性。