我正在尝试显示模型而不是下拉列表

时间:2014-11-20 04:38:06

标签: asp.net-mvc-3

所以基本上一旦用户点击模块进行创建,我希望它显示所显示的模块而不是下拉列表供选择。


@model Module1.Models.Learn

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"type="text/javascript"></script>

@using (Html.BeginForm()) {
  @Html.ValidationSummary(true)
  <fieldset>
    <legend>Learn</legend>
      <div class="editor-label">
        @Html.LabelFor(model => model.ModuleId, "Module") 
      </div>
      <div class="editor-field">
        @Html.DropDownList("ModuleId", String.Empty)
        @Html.ValidationMessageFor(model => model.ModuleId)
      </div>

以上是我的学习成果创建视图。


@model Module1.Models.Module

@{
    ViewBag.Title = "Details";
}

<h2>Learning Outcome : @Model.Code</h2>
<br /

这是我的学习成果的详细信息视图。我尝试使用代码“@ Module.Code”在我的创建视图中进行描绘,但是没有成功。我有另一种方法可以在创建视图中获得相同的结果吗?


我的模块模型

using System.Collections.Generic;

namespace Module1.Models
{
   public class Module
{
    public int ModuleId { get; set; }
    public int CourseId { get; set; }
    public int LecturerId { get; set; }
    public string Code { get; set; }
    public string Description { get; set; }

    public virtual Course Course { get; set; }
    public virtual Lecturer Lecturer { get; set; }

    public List<Reference> References { get; set; }
    public List<Assessment> Assessments { get; set; }//new
    public List<Front> Fronts { get; set; }
    public List<Learn> Learns { get; set; }
    public List<Topic> Topics { get; set; }

}
}

我的学习模式

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Module1.Models
{
    public class Learn
    {
    public int LearnId { get; set; }
    public int ModuleId { get; set; }
    public string LearnText { get; set; }
    public bool A { get; set; }
    public bool B { get; set; }
    public bool C { get; set; }
    public bool D { get; set; }
    public bool E { get; set; }
    public bool F { get; set; }
    public bool G { get; set; }
    public bool H { get; set; }
    public bool I { get; set; }
    public virtual Module Module { get; set; }

}
}

1 个答案:

答案 0 :(得分:0)

在用于创建的GET方法中,您需要生成一个SelectList,表示您要在下拉列表中呈现的选项。理想情况下,您应该使用视图模型来表示要显示/编辑的内容,但在此示例中,我将仅分配到ViewBag

var modules = // call database to get all the modules
ViewBag.ModuleList = new SelectList(modules, "ModuleId", "Code");

查看

@model Module1.Models.Learn
....
@using (Html.BeginForm()) {
  ....
  @Html.DropDownListFor(m => m.ModuleID, (SelectList)ViewBag.ModuleList, "-please select-")
  ....
}

或者如果您使用视图模型(您应该参考What is ViewModel in MVC?),那么它将是

@Html.DropDownListFor(m => m.ModuleID, Model.ModuleList, "-please select-")

请注意,属性Module.Code的值将是显示文本,属性Module.ModuleId的值将绑定到Learn.ModuleID属性。如果在将控制器传递给视图之前在控制器中设置Learn.ModuleID的值,则会显示该Module的文本,否则将选择“-please select-”选项。

注意总是使用强类型帮助者 - DropDownListFor()而不是DropDownList()

修改

根据OP的进一步评论,将值显示为“只读”。在控制器中,获取Code的{​​{1}}值并分配给视图模型或Module属性

ViewBag

并在视图中

var module = db.Modules.Where(m => m.ModuleId == learn.ModuleId).FirstOrDefault();
if (module != null)
{
  ViewBag.Code = module.Code;
}

<div>@ViewBag.Code</div>

如果您想要回发该值,请为@Html.DisplayFor(m => m.Code) // if using a view model

添加隐藏的输入
ModuleID