2010-08-23 3 views
0

View asp.net mvc2 응용 프로그램에서 코드를 디버깅하는 방법은 무엇입니까?뷰 (asp.net mvc2)에서 코드 디버깅

편집을 진행 한 후 지난 밤 :

좋아, 그래서 지금은 다음과 같습니다

Shared\EditorTemplates\Equipment.ascx에 :

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DAT.Models.Item>" %> 

    <% using (Html.BeginForm()) {%> 
     <%: Html.ValidationSummary(true) %> 

     <div class="editor-label"> 
      <%: Html.Label("Item ID") %> 
      <%: Html.TextBoxFor(model => model.ItemID) %> 
      <%: Html.ValidationMessageFor(model => model.ItemID) %> 
     </div> 

     <div class="editor-label"> 
      <%: Html.LabelFor(model => model.ModelID) %> 
      <%: Html.DropDownListFor(x => x.Model.Model1, new SelectList(Model.Model.Model1, "ModelId", "Model", Model.ModelID)) %> 
      <%: Html.ValidationMessageFor(model => model.ModelID) %> 
     </div> 

     ... 

Item\Edit.aspx에 :

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<DAT.ViewModels.ItemEditViewModel>" %> 

    <% using (Html.BeginForm()) {%> 
      <%: Html.ValidationSummary(true) %> 

      <fieldset> 
       <legend>Fields</legend> 
        <%: Html.EditorFor(model => model.Item) %> 
       <p> 
        <input type="submit" value="Save" /> 
       </p> 
      </fieldset> 

controlle R :

public ActionResult Edit(int id) 
    { 
     var models = from p in database.Models.Where(x => x.Model1 != null) select p; 

     var viewModel = new ViewModel 
          { 
           Things = database.Things.Single(a => a.ItemID == id), 

           //tried this: 
           //Models = database.Models     

           Models = models 
          }; 

     return View(viewModel); 
    } 

그래서 나는 확신 문제는이 라인

<%: Html.DropDownListFor(x => x.Model.Model1, new SelectList(Model.Model.Model1, "ModelId", "Model", Model.ModelID)) %> 

selectList의를 생성 할 때, 나는 첫 번째 매개 변수에 대한 IEnumerable을하지 않아도 함께 있음? 또는 내가 먹이를 먹고있는 값 중 하나가 null입니다. 내보기에서 모델 목록을 얻으려면 어떻게해야합니까? ALL 내 머리를 잡아 당겨 AFTER

편집 :

그것은 문제가 보인다는이 예제에있다 : http://www.asp.net/mvc/tutorials/mvc-music-store-part-4. 이상하게도 모범 사례를 따르고 있는지 확실하지 않습니다. 코드를 살펴보고 모델이 어떻게 전달되는지 살펴 봅니다. ViewData [ "Blah"]와 모델을 사용하여 어리석게 보입니다. 왜 모델로 모두 전송할 수 없습니까?

Album.ascx : 코드 봐 그들은 그 일을 어떻게

<%@ Import Namespace="MvcMusicStore"%> 

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcMusicStore.Models.Album>" %> 

<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 

<p> 
    <%: Html.LabelFor(model => model.Title)%> 
    <%: Html.TextBoxFor(model => model.Title)%> 
    <%: Html.ValidationMessageFor(model => model.Title)%> 
</p> 
<p> 
    <%: Html.LabelFor(model => model.Price)%> 
    <%: Html.TextBoxFor(model => model.Price)%> 
    <%: Html.ValidationMessageFor(model => model.Price)%> 
</p> 
<p> 
    <%: Html.LabelFor(model => model.AlbumArtUrl)%> 
    <%: Html.TextBoxFor(model => model.AlbumArtUrl)%> 
    <%: Html.ValidationMessageFor(model => model.AlbumArtUrl)%> 
</p> 
<p> 
    <%: Html.LabelFor(model => model.Artist)%> 
    <%: Html.DropDownList("ArtistId", new SelectList(ViewData["Artists"] as IEnumerable, "ArtistId", "Name", Model.ArtistId))%> 
</p> 
<p> 
    <%: Html.LabelFor(model => model.Genre)%> 
    <%: Html.DropDownList("GenreId", new SelectList(ViewData["Genres"] as IEnumerable, "GenreId", "Name", Model.GenreId))%> 
</p> 

보기 :

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcMusicStore.ViewModels.StoreManagerViewModel>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    Edit - <%: Model.Album.Title %> 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <h2>Edit Album</h2> 

    <% Html.EnableClientValidation(); %> 

    <% using (Html.BeginForm()) {%> 

    <fieldset> 
     <legend>Edit Album</legend> 
     <%: Html.EditorFor(model => model.Album, new { Artists = Model.Artists, Genres = Model.Genres}) %> 
     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 

    <% } %> 

    <div> 
     <%:Html.ActionLink("Back to Albums", "Index") %> 
    </div> 

</asp:Content> 

보기 모델 :

using System.Collections.Generic; 
using MvcMusicStore.Models; 

namespace MvcMusicStore.ViewModels 
{ 
    public class StoreManagerViewModel 
    { 
     public Album Album { get; set; } 
     public List<Artist> Artists { get; set; } 
     public List<Genre> Genres { get; set; } 
    } 
} 

그리고 컨트롤러 : 나에게 논리적 인 의미가 같은 모델이 컨트롤러에 내장처럼

// 
// GET: /StoreManager/Edit/5 

public ActionResult Edit(int id) 
{ 
    var viewModel = new StoreManagerViewModel 
    { 
     Album = storeDB.Albums.Single(a => a.AlbumId == id), 
     Genres = storeDB.Genres.ToList(), 
     Artists = storeDB.Artists.ToList() 
    }; 

    return View(viewModel); 
} 

그래서 그것은 나에게 보인다. 다음보기에 그들은 내 혼란의 원인이 문장 사용

<%: Html.EditorFor(model => model.Album, new { Artists = Model.Artists, Genres = Model.Genres}) %>

모델은 분할/변경되는 및 지금 우리는을 ViewData로 다른 (아티스트, 장르)를 보내? 누군가가 설명 할 수 있습니까? 그리고 전체 디자인 패턴에 부합합니까?

+0

컨트롤러에 작업 방법을 표시 할 수 있습니까? –

+0

ViewData [ "Models"]가 null 인 것 같습니다. –

답변

3

컨트롤러 동작에 중단 점을 넣고 모델을 분석하고 데이터를 볼 수 있습니다.

이렇게 말하면 왜 강력하게 형식화 된보기와 ViewData을 동시에 사용하고 있습니까?ViewData["Models"] as IEnumerable이 (컨트롤러에서) null이 아니거나 더 좋게 제거하고 강력하게 형식화 된 속성으로 모델에 넣는 것이 더 좋습니다. 또한 강하게 입력 된 도우미 DropDownListFor을 사용하는 것이 좋습니다.

<%: Html.DropDownListFor(
    x => x.ModelID, 
    new SelectList(Model.Models, "ModelId", "Model", Model.ModelID) 
)%> 
+0

샘플 코드가 http://www.asp.net/mvc/tutorials/mvc-music-store-part-4를 수행 한 것으로 여기에서 예제를 따르고 있습니다. 컨트롤러에서 중단 점을 설정하는 한 AFAICT는 null 값을 전달하지 않습니다. – baron

+0

null 값을 전달하지 않고 있습니다. 그러나 'ViewData [ "Models"] as IEnumerable'은 잘못된 변환이고 null을 반환 할 수 있습니다. – Charlino

관련 문제