2017-03-29 12 views
0

私はMVCの初心者です。ここで質問している質問は非常に基本的なものかもしれません。しかし、私は学習の道を渡ることができなかったことを解決することなく。ビューからコントローラにサブミットするとエラーメッセージが返される

私は単純なコントローラと2つのビューを持っています。私の要件は最初はビューがロードされ、ボタンをクリックすると、別のビューにロードされます。私は、ajaxを使用せずにビューからコントローラに投稿する方法を知らないので、私はそれを試み、それが動作します。しかし最後には、2番目のビューにリダイレクトされていますが、後でajaxの失敗アラートが表示されます。正確にどこが間違っているのかを特定できませんでした。下にコードがあります。

コントローラ。

public class DashboardController : Controller 
    { 
     // 
     // GET: /Dashboard/ 
     [HttpPost] 
     public ActionResult LoginResult() 
     { 
      string strName = Request["username"].ToString(); 
      return View("Validateresult"); 
     } 
     public ActionResult Index() 
     {   
      return View(); 
     } 
} 

View1を

@model MvcApplication5.Models.Employee 
@{ 
    ViewBag.Title = "Dashboard"; 
} 
<script src="https://code.jquery.com/jquery-1.10.2.js"></script> 

    <h2>Dashboard</h2> 

@using (Html.BeginForm("LoginResult", "Dashboard", FormMethod.Post)) 
    { 
    @Html.EditorFor(model =>model.username) 
    <button type="button" id="ajax_method">submit Via AJAX</button> 

    } 
<script> 


    $(function() { 
     $('#ajax_method').click(function (e) { 
      e.preventDefault(); 
      var postData = { 
       username: $("#username").val() 

      }; 
      $.ajax({ 
       type: "POST", 
       url: "/Dashboard/LoginResult",       //Your Action name in the DropDownListConstroller.cs 
       data: { username: $('#username').val() }, //Parameter in this function, Is case sensitive and also type must be string 

       dataType: "json" 

      }).done(function (data) { 
       //Successfully pass to server and get response 
       if (data.result = "OK") { 
        window.location.href = "Validateresult"; 
        alert("submit successfully."); 
       } 
      }).fail(function (response) { 
       if (response.status != 0) { 
        alert(1); 
        alert(response.status + " " + response.statusText); 
       } 
      }); 
     }); 

    }); 
</script> 

VIEW2

@{ 
    ViewBag.Title = "Validateresult"; 
} 

<h2>Validateresult</h2> 

モデル

public class Employee 
    { 

      public string username { get; set; } 
      public string age { get; set; } 

    } 

誰かがどのようにコントローラに、別のビューまたはにビューを提出するよう、よりよい解決策を提案することができますこの問題を解決するには?

+0

ボタンを「submit」に変更します。これは下のajaxポストなしであなたのフォームをあなたのコントローラに投稿します。 – Wheels73

+0

送信ボタンとして ''を使用してビューを返す場合は、単純なPOSTを使用してください.AJAXは、モデルを使ってページ全体を再読み込みする必要がない部分ビューをレンダリングする方が適切です。 –

+0

@山本哲也普通の投稿はどういう意味ですか? –

答えて

1

ここは簡単な例です。最初のビューテストの負荷。モデルを使用して投稿をコントローラに戻してクリックし、Test2を表示するようにリダイレクトします。

public class TestController : Controller 
    { 
     // 
     // GET: /Test/ 

     [HttpGet] 
     public ActionResult Test() 
     { 
      var model = new CurrentViewModel(); 
      return View("Test", model); 

     } 

     [HttpGet] 
     public ActionResult Test2() 
     { 
      var model = new CurrentViewModel(); 
      return View("Test2", model); 

     } 

     [HttpPost] 
     public ActionResult TestPost(CurrentViewModel model) 
     { 
      return RedirectToAction("Test2"); 
     } 
    } 

送信ボタンによるテストビュー。

@using (Html.BeginForm("TestPost", "Test", FormMethod.Post)) 
    { 
     <button type="submit">Submit</button> 
    } 
+0

ありがとう。これは機能します。 :-) –

関連する問題