2011-08-09 6 views
1

MVC 3/Razorを初めて使用し、簡単なサイトで作業して基礎を学びます。そのために、私は、/ Home/SignedInAsのページにDropDownListをレンダリングする簡単なビューを作成しました。パーシャルビューではNullReferenceExceptionが発生しますが、同等ではありません。

私のホームコントローラのロジックは次のとおりです。

SignedInAsViewModelは簡単です
public class HomeController : Controller 
{ 
    public ActionResult SignedInAs() 
    { 
    SignedInAsViewModel siavm = new SignedInAsViewModel(); 
    siavm.SignedInAsOptions = db.GetSignedInAsOptions(); 
    return View(siavm); 
    } 
} 

public class SignedInAsViewModel 
{ 
    public SignedInAsViewModel() 
    { 
    this.SignedInAsOptions = new List<SignedInAs>(); 
    } 

    public IEnumerable<SignedInAs> SignedInAsOptions { get; set; } 
} 

および方法、db.GetSignedInAsOptions()プロパティでSignedInAsオブジェクトのリストを返します。 、IDと名前。

とビュー/ホーム/ SignedInAs.cshtmlで、私が持っている:

@model myMVCApp.Views.SignedInAsViewModel 
... 
@Html.DropDownList("ddlSignedInAs", new SelectList(Model.SignedInAsOptions, "ID", "Name", selectedValue)) 
... 

し、選択リストには、/ホーム/ SignedInAsで私のページに期待どおりにレンダリングします。

私が本当にやりたいことは、すべてのページの上部にDropDownListをレンダリングすることです。

public class SignedInAsController : Controller 
{ 
    public ActionResult ShowSignedInAs() 
    { 
    SignedInAsViewModel siavm = new SignedInAsViewModel(); 
    siavm.SignedInAsOptions = GetSignedInAsOptions(); 
    return PartialView(siavm); 
    } 
} 

そして、私の_Layout.cshtmlで(私はここにもreturn View(siavm)を試してみました。):

@model myMVCApp.Views.SignedInAsViewModel 
@if (Request.IsAuthenticated) 
{ 
    <text><div>@Html.DropDownList("ddlSignedInAs", new SelectList(Model.SignedInAsOptions, "ID", "Name", selectedValue))</div></text> 
} 

とコントローラ、SignedInAsController:だから、私は部分図、_SignedInAsPartialを作成しました私が持っているすべてのページで使用されています:

@Html.Partial("_SignedInAsPartial") 

すべてのページをロードしようとすると、 NullReferenceExceptionとビジュアルデバッガが_SignedInAsPartial.cshtmlで停止する

ブレークポイントがSignedInAsControllerにヒットすることはありません。

私は明らかにここで何かを理解していない、私は見つけることができるすべてを読んだ。しかし、私はそれを理解することはできません。選択リストはページビューではうまく表示されますが、部分ビューでは表示されないのはなぜですか?

答えて

1

モデルをパーシャルビューに渡すか、Html.RenderActionを使用する必要があります。コントローラの操作でそのビューを元に戻す必要があります。

+0

ありがとうSatjinder。 これを前後すると、私はMVCの基本に十分な根拠がないことに気がついたので、さまざまな投稿とオンラインウォークスルーを一緒にしようとするのではなく、実際の本を読んでいました。 – Rich

関連する問題