0

RazorPageではフォームを送信しますが、モデルOnPost()ではRequest.Form ["myfield"]は空です。プロパティが利用可能でない限り、Request.Form ["myfield"]はなぜ空白ですか?

<form method="post"> 
<input id="myfield"/> 
<button type="submit">Submit</button> 
</form> 

しかし、私はモデルにクラスレベルのプロパティを追加する場合:それはブレークポイントにヒットしたときに

<form method="post"> 
<input asp-for="myfield"/> 
<button type="submit">Submit</button> 
</form> 

Request.Form["myfield"]が移入さ:TagHelperを使用するようにフォームを

public string myfield { get; set; } 

と更新OnPost()内にあります。しかし、実際のプロパティはOnPost()ではnullです。

何が起こっているのか理解していますか?意味:

なぜRequest.Form["myfield"]には、クラスレベルのプロパティが設定されていませんか?

プロパティに値が入力されないのはなぜですか?

- EDIT -
nameの代わりにidを使用しているため、最初の部分です。

asp-forとモデルプロパティの2番目の部分についてはまだ分かりません。

+0

'asp-for'も' name'属性を設定します - あなたは最初のコードスニペットでそれを設定しようとしましたか? –

+0

その外観のコードスニペットを提供できますか? asp-name属性はありません。 – 4thSpace

+0

私は、あなたの最初のコード例である 'asp-for'なしで、' 'を試してみることを意味します。私は 'id'ではなく' name'から外れているように感じます。 –

答えて

0

レイザーページは、フォームフィールドに自動的に入力されるWebフォームと似ていません。それらは単純化されたMVCコントローラのようなものです。

あなたは、フォームフィールドのすべてがあなたのPOSTメソッドのパラメータとして、それを追加することによって渡されていることを指定することができます。バインド可能なプロパティを使用して

public async Task<IActionResult> OnPostAsync(IFormCollection data) { 
    var myField = data["myField"]; 
    ... 
} 

は、クライアントとサーバーの間でデータを永続化するための好ましい方法であります。