2017-08-28 56 views
0

我正在尝试编写一个简单的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 Test 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.WidgetName)显示返回的数据出现错误:

的HtmlHelper做不包含DisplayNameFor的定义,也不包含扩展方法DisplayName用于接受类型为“HTMLHelper”的第一个参数。你错过了一个汇编或参考?

我读过我应该'使用System.Web.Mvc.HtmlHelper;'但是这似乎是一个命名空间,所以不能以这种方式使用。改变我的名字空间意味着我不能再访问这个类。

我也读过System.Web.Mvc.Html应该包含'HtmlHelper',但使用这个还没有解决我的问题。

我的问题是:

1:我应该使用@ Html.DisplayNameFor(型号=> model.WidgetName)用.cshtml文件或有另一种方式来访问数据?

2:如果我尝试访问数据的方式正确,我如何添加命名空间以便我可以访问HtmlHelper命名空间。

3:如果我试图访问数据的方式对于.cshtml文件不正确,请问有人能指向我可以读取的某些文档吗?

谢谢。

+0

,您是否试图脚手架?你的意见 –

+0

感谢您的答复,我以前用的脚手架,但我试图做手工,这时候得到更好的理解如何一切正常。 我希望能够完成脚手架/ EF所做的工作,但是我正在尝试学习和理解编写代码时发生了什么以及运行时会发生什么。 – Danny

+0

尝试阅读此https://stackoverflow.com/questions/9465376/when-should-i-use-html-displayfor-in-mvc,和这个https://stackoverflow.com/questions/6365633/what-is-在-HTML-displayfor语法换 –

回答

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); 
     } 
相关问题