2

私は MVC 環境に不慣れで、VS 2010 で作成された MVC3 サンプル アプリ (ファイル -> 新規 -> プロジェクト -> MVC3 Web アプリケーション) を使用しています。

このアプリケーションには、Web ページの右上に「ログイン」リンクがあります。ログイン ページをクリックすると、基本的なユーザー ID とパスワードのテキスト フィールドと送信ボタンのあるページが表示されます。

LogOn.cshtml ページでは、送信ボタンの HTML コードは次のとおりです。

    <p>
        <input type="submit" value="Log On" />
    </p>  

AccountController.cs ページで、public ActionResult LogOn(LogOnModel model, string returnUrl)関数が呼び出されます。

質問: [送信] ボタンは、AccountController.cs で呼び出す関数をどのように認識しますか?

私の混乱は、aspx ページに、実行する機能をボタンに伝える Button.OnClick メソッドがある可能性が高いという事実によって引き起こされます。

4

4 に答える 4

2

ルーティング エンジン経由。アプリケーションには、次のようなルートがあります

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

基本的に、この場合のフォームで使用されるアクションは /Account/LogOn です。メイン ルートを見ると、これは controller = "Account" および Action = "Logon" に変換されます。

これはメカニズムの鳥瞰図です。ASPNET MVCサイトには、MVCの基本を説明する一連の優れたチュートリアルがあります。

編集

HTML では、送信ボタンを使用してフォーム データをサーバーに送信します。データは、フォームの action 属性で指定されたページに送信されます。action 属性で定義されたファイルは、通常、受け取った入力に対して何かを行います。

htmlコード

<input type="submit" value="Log On" />

cshtmlページのフォームタグにラップされます

@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
   //html here
}

ブラウザでレンダリングすると、フォームタグは次のようになります

<form action="/Account/Logon" class="form-horizontal well" method="post" novalidate="novalidate">
<input id="ReturnUrl" name="ReturnUrl" type="hidden" value="/"> 
<!-- other HTML elements here -->
<input type="submit" value="Log On" />     
</form>

したがって、送信ボタンがクリックされると、フォームは form タグの action 属性の URL に投稿 (HTTP Verb POST) されます。この場合、/Account/Logon.

詳細については、W3C Form Recommendationを参照してください。

WebForms から MVC への最大のステップは、WebForms が基礎となる HTML 仕様の多くを開発者から切り離して抽象化することです。

于 2013-01-15T02:59:00.633 に答える
0

こんにちは、以下のような例を挙げます

あなたのコントローラーには、次のような2つのアクションメソッドがあります(例では、国のコントローラーがあります)

(1) 

            [HttpGet]
            public ActionResult Create()
            {
                return View();
            }
(2)
        [HttpPost]
        public ActionResult Create(Country country)
        {
            if (ModelState.IsValid)
            {

                CountryRepository.InsertOrUpdate(country);
                CountryRepository.Save();                    
                 return RedirectToAction("Index");
            }

            return View(country);
        }

asp.net Web フォームでは、ページ読み込み機能を使用しています。mvc [HttpGet] Create Action と同じように、ページ読み込み関数のように使用しています。

あなたの見解で

@using (Html.BeginForm("Create", "Country", FormMethod.Post))
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Country</legend>
        @Html.Partial("_CoutnryAddOrEdit", Model)
        <p>
            <input type="submit" value="Create" id="btnSave" />
        </p>
        <br />
        <p>
            <input type="submit" value="GetData" id="btnGetData" />
        </p>
    </fieldset>
}

Html.BeginForm関数には異なるパラメーターがあります。その関数では、最初のパラメーターは「アクション名」、2番目は「コントローラー名」、3番目は「GETまたはPOSTなどのFormMethod」のようなパラメーター値を渡します

1) Get=> ページがロードされたときに呼び出される Get メソッド

2) POST => ボタンをクリックした後に呼び出される Post メソッド。

あなたの Html.BeginForm は、この Html.BeginForm("Create","Country",FormMethod.Post) のようになります。

そのため、アクションを実行しないボタンをクリックした後、すべてのコードを Post Method に記述します。

これが役立つと思います。

于 2013-01-15T05:33:57.803 に答える
0

mvc の送信ボタンをクリックすると、フォーム アクション属性内で定義されたアクションにフォームが送信されます。フォームでアクションが定義されていない場合は、フォームが送信されたのと同じアクション名で、フィルターが [Httppost] であるフォームを送信します。

于 2013-01-15T05:16:39.990 に答える
-1

ボタンクリックイベントを処理するには、jqueryを使用してajax投稿を処理することをお勧めします。以下の方法を試してください。

  <input type="button" value="Button 1" class='button1' />

[脚本]

 <script type="text/javascript">

    $('.button1').click(function () {

    $.ajax({
       type: "POST",          
       url: '@Url.Action("ActionName", "ControllerName")',
       dataType: "html",
       success: function (result) {
          // after the post action
       }
    });
 });

于 2013-01-15T06:00:20.553 に答える