2017-08-28 82 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); 
     } 
相關問題