2

強く型付けされたViewModelに関連付けられたビューがありますが、MVC3 HTMLヘルパーを使用しておらずinput、通常のHTMLタグのみを使用しています。ただし、ViewModelが完全にnullであるため、これはアクションメソッドに値を正しく渡していないようです。

ViewModel:

class QuoteSearch {
    public long? CustomerId { get; set; }
    public string CustomerFirstName { get; set; }
    public string CustomerLastName { get; set; }
}

意見:

@model QuoteSearch

<form action="/quotes/search" method="POST">
    <p>Customer ID: <input id="CustomerIdField" name="CustomerId" type="text" /></p>
    <p>Customer First Name: <input id="CustomerFirstNameField" name="CustomerFirstName" type="text"/></p>
    <p>Customer Last Name: <input id="CustomerLastNameField" name="CustomerLastName" type="text"/></p>
    <p><button id="SearchButton" type="submit">Search</button></p>
</form>

コントローラ:

 [HttpPost]
 public ActionResult Search(QuoteSearch search) { 
     // checking if fields are set here.
 }

Htmlヘルパーを使用する必要はないが、(ではなくFormCollection)強く型付けされたモデルを使用する方法があることを覚えているようです。name属性をモデルのプロパティの正確な名前に設定する必要があると思いましたが、間違っていたようです。

4

2 に答える 2

1

(コメントで示唆されているように)名前がすべて揃っているわけではありませんが、並んでいるフィールドについては、上記のコードを実行するとモデルが正しく入力されます(名前はありますが、CustomerIdはnullです)。

ブレークポイントを設定していて、コードがヒットしていることを知っていますか?

コントローラがQuotesと呼ばれていることも確認してください。たとえそうであるとしても、あなたはより良いものになるでしょう:

<form action="@Url.Action("search", "quotes")" method="POST">

...エリアなどを追加してもルーティングが機能するようにします。URLヘルパーは、ルーティングルールに基づいてリクエストの正しいパスを作成します。

最後に、ブレークポイントが設定された実行ポイントに到達していない場合は、F12 / devツールを使用してネットワーク要求を監視し、正しいアドレスが呼び出されていることを確認してください。上記のスニペットもそれを解決するのに役立つはずです。

それがいくつかの助けになることを願っています。

于 2012-07-06T16:17:33.770 に答える
0

name="[ViewModel]。[FieldName]"とid="[ViewModel]_[FieldName]"を試してください

これらは、HTMLヘルパーを使用するときに入力タグに設定する値です。

したがって、あなたにとっては次のようになります。

<input type="text" name="QuoteSearch.CustomerId" id="QuoteSearch_CustomerId" />

等..

于 2012-07-06T17:40:22.490 に答える