2017-08-28 19 views
0

選択リストから選択されたIDによって特定の詳細が表示される単純なWebアプリケーションを作成しようとしています。私は、次を使用してデータベースからデータを取得することができコントローラから返されたビューにデータを表示する

クラス:

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); 
     } 
    } 
} 

'データ' で返されるデータは、次のように返されます

ウィジェットID 1 ウィジェット説明テスト 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の定義を含んでおらず、拡張メソッドがないDisplayNameForは、 'HTMLHelper'タイプの最初の引数を受け入れることができます。あなたはアセンブルや参照がありませんか?

私は「System.Web.Mvc.HtmlHelperを使用する」必要があることを読んだ。しかし、これは名前空間のように見えるので、このように使用することはできません。私の名前空間を変更すると、私はこのクラスにアクセスできなくなります。

また、System.Web.Mvc.Htmlには 'HtmlHelper'が含まれている必要がありますが、これを使用しても問題は解決していません。

私の質問は以下のとおりです。

1:私は.cshtmlファイルで@ Html.DisplayNameFor(モデル=> model.WidgetName)を使用するか、データにアクセスするための別の方法があるでしょうか?

2:データへのアクセス方法が正しい場合、HtmlHelper名前空間にアクセスできるように、どのように名前空間を追加するのですか。

3:データにアクセスしようとしている方法が.cshtmlファイルに対して正しくない場合は、誰かが私が読むことができるいくつかのドキュメントを指摘できますか?

ありがとうございました。

+0

、あなたの意見?返信用 –

+0

感謝を足場しようとしなかった、私が以前に足場を使用しているが、私はすべてがどのように動作するかの理解を得るために、手動でこの時間は、それをやろうとしました。 私はscaffolding/EFとは何かできることが理想ですが、コードを記述するときに何が起こっているのか、実行するときに何が起こるのかを学び、理解しようとしています。 – Danny

+0

このhttps://stackoverflow.com/questions/9465376/when-should-i-use-html-displayfor-in-mvcを読んでみてください。このhttps://stackoverflow.com/questions/6365633/what-is- the-html-displayfor-syntax-for –

答えて

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); 
     } 
関連する問題