1

私は MVC 3 でかなり新しいですが、かなり奇妙な問題に遭遇しました。私は Razor 構文を使用しています。VS によれば、@ステートメントの直前に別の@ステートメントがある場合、またはコード内でプレフィックス@が不要になった場合は、ステートメントにプレフィックスを付ける必要はありません。

だからここに私のビューの私のコードがあります:

    @using (Html.BeginForm("StudentSelect", "Home", FormMethod.Post, new { id = "sSelect" }))  {

        Html.HiddenFor(m => m.SelectedStudent);
        foreach (Classes.CStudent item in Model.Students)
        {
            <div class="studentSelect">
                <div class="studentname">@item.StudentName</div>
                <div>@item.Address</div>
            </div>   
        }
    }

Html.HiddenForおよびforeach行に@接頭辞がないことに注意してください。生成された HTML は<form>、フィールドが続く<input type="hidden">フィールドを生成する必要があります。ただし、生成されたページの HTML を確認すると、非表示の入力フィールドがありません。

<form action="/Home/StudentSelect" id="sSelect" method="post">                
   <div class="studentSelect">
        <div class="studentname">Name1</div>
        <div>AAA</div>
   </div>   
   <div class="studentSelect">
        <div class="studentname">Name2</div>
        <div>Address1</div>
   </div>   
</form>

私は何か間違ったことをしていますか?非表示の入力がレンダリングされないのはなぜですか? どんな手がかりも役立ちます。ありがとう

ちなみに、このコードは正しくコンパイルされます。ただし、コード@の前にプレフィックスを付けるとHtml.HiddenForコンパイルされず、Visual Studio でエラーが発生します。

4

1 に答える 1

2

@は 2 つの目的があります。1 つは「コード モード」をトリガーし、もう 1 つは省略形Response.Writeです。

トリガー「コードモード」の@前のインスタンス。前usingのインスタンスは と同等です。これは、応答ストリームに書き込む必要がある出力を返すため、引き続き必要です。@item.AddressResponse.Write(item.Address);Html.HiddenForMvcHtmlString

この行:

Html.HiddenFor(m => m.SelectedStudent);

次のようにする必要があります。

@Html.HiddenFor(m => m.SelectedStudent)

;が不要になったことに注意してください。

于 2012-12-28T10:31:45.110 に答える