我正在尝试编写一个简单的Web应用程序,它根据从选择列表中选择的ID来显示某些细节。
我可以使用以下方法从数据库中获取数据:
类别:
namespace InterviewTest.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("Widget")]
public partial class Widget
{
public int WidgetID { get; set; }
[Required]
[StringLength(50)]
public string WidgetName { get; set; }
[Required]
public string WidgetDescription { get; set; }
public int WidgetColourID { get; set; }
}
}
控制器:
using System.Linq;
using System.Web.Mvc;
using InterviewTest.Models;
namespace InterviewTest.Controllers
{
public class HomeController : Controller
{
WidgetConn db = new WidgetConn();
public virtual ActionResult Index(Widget widget)
{
var widgets =
(from w in db.Widgets
where w.WidgetID == 1
select new
{
WidgetName = w.WidgetName,
WidgetDescription = w.WidgetDescription,
WidgetColourID = w.WidgetColourID
}).ToList();
var data = widgets[0];
return View(data);
}
}
}
'数据'中返回的数据返回为:
WidgetID 1 WidgetDescription测试 WidgetColourID 1
测试视图:
@model InterviewTest.Models.Widget
@{
ViewBag.Title = "test";
}
<h2>test</h2>
<div>
<h4>Widget</h4>
<hr />
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.WidgetName)
</dt>
<dd>
@Html.DisplayFor(model => model.WidgetName)
</dd>
<dt>
@Html.DisplayNameFor(model => model.WidgetDescription)
</dt>
<dd>
@Html.DisplayFor(model => model.WidgetDescription)
</dd>
<dt>
@Html.DisplayNameFor(model => model.WidgetColourID)
</dt>
<dd>
@Html.DisplayFor(model => model.WidgetColourID)
</dd>
</dl>
</div>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.WidgetID }) |
@Html.ActionLink("Back to List", "Index")
</p>
当我尝试使用@ Html.DisplayNameFor(model =&gt; model.WidgetName)来显示返回的数据时,我收到错误:
htmlhelper不包含DisplayNameFor的定义,也没有扩展方法DisplayName用于接受类型&#39; HTMLHelper&#39;的第一个参数。可以找到。你错过了汇编或参考吗?
我读到我应该使用System.Web.Mvc.HtmlHelper;&#39;但是这似乎是命名空间,所以不能以这种方式使用。更改我的命名空间意味着我无法再访问此类。
我还读到System.Web.Mvc.Html应该包含&#39; HtmlHelper&#39;但使用这个并没有解决我的问题。
我的问题是:
1:我应该使用带有.cshtml文件的@ Html.DisplayNameFor(model =&gt; model.WidgetName)还是有其他方式来访问数据?
2:如果我尝试访问数据的方式是正确的,我如何/在何处添加命名空间,以便我可以访问HtmlHelper命名空间。
3:如果我试图访问数据的方式对于.cshtml文件不正确,那么有人能指出我可以阅读的一些文档吗?
感谢。
答案 0 :(得分:0)
我认为这是因为您选择的数据是未知类型。而不是未知,指定其类型。所以请替换您的代码,如下所示。
public virtual ActionResult Index(Widget widget)
{
IEnumerable<Widget> widgets =
(from w in db.Widgets
where w.WidgetID == 1
select new Widget
{
WidgetName = w.WidgetName,
WidgetDescription = w.WidgetDescription,
WidgetColourID = w.WidgetColourID
}).ToList();
var data = (widgets!=null && widgets.length>0)? widgets[0]: null;
return View(data);
}