ビューでViewUserControl(.ascxファイル)をレンダリングしています:
<% Html.RenderPartial("Comments", Model.Comments); %>
このViewUserControlは、エントリに関連付けられたコメントを表示します。このコントロールでフォームもレンダリングして、アプリケーションのユーザーが貢献できるようにしたいと思います。
ViewUserControlにフォームを追加し、そのポストバックをどのように処理しますか?
ビューでViewUserControl(.ascxファイル)をレンダリングしています:
<% Html.RenderPartial("Comments", Model.Comments); %>
このViewUserControlは、エントリに関連付けられたコメントを表示します。このコントロールでフォームもレンダリングして、アプリケーションのユーザーが貢献できるようにしたいと思います。
ViewUserControlにフォームを追加し、そのポストバックをどのように処理しますか?
他のページと同じように、そこにフォームを追加するだけです。MVCでは、フォーム自体はポストバックされません。フォームは、HTTP Postを介して自分自身とそのコンテンツ(入力コントロール)をURLに送信するだけです。
コントローラーでアクション(したがってURL)を作成するだけで、フォームが投稿し、そこで必要なアクティビティを実行します...
標準のasp.netのように、ポストアバックはありません。データを特定のURL(コントローラー/アクション)に投稿するフォームタグのみが存在できます。
部分的なユーザーコントロール内に、次のように記述します。
<form action="controller/actionname" method="post">
<input type="text" name="inputText" />
<input type="submit" value="Post data to server" />
</form>
MVCでは、入力type="submit"のみがフォームの送信をトリガーします。標準のASP.NETWebフォームでは、多くのLinkbuttons、Buttonsなどを使用できますが、これらはすべて、javascriptイベントを介してinput type="submit"をクリックするだけでトリガーされます。1つのフォームは1つのURL(コントローラー/アクション)にのみデータを投稿できますが、それはjavascriptで変更できます(「古い」asp.net Webフォームのhtmlソースで確認できます)。
次に、コントローラーで投稿データを処理できます。
[AcceptVerb(HttpVerb.Post)] // optionally
public ActionResult ActionName(string inputText) ...
他の人がすでに回答しているように、フォームをレンダリングし、その送信をActionResultで処理するだけです。
たとえば、フォーム(サイトのどこにでもレンダリングできる)がhttp://www.yoururl.com/home/saveに送信する場合、送信を処理するためにホームコントローラーにsaveという名前のActionResultメソッドを作成します(おそらくpost/getメソッド)。