所以基本上一旦用户点击模块进行创建,我希望它显示所显示的模块而不是下拉列表供选择。
@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; }
}
}
答案 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