2016-05-17 11 views
0

私はいくつかのチュートリアルを続けてきましたが、私はStackOverflowを精査しましたが、まだまだ終わりが近づいています。ViewModelの値は常にnullです

基本的に、私はMVC 5でフォームを送信しようとしています(MVC初心者ですが、Webフォームを大量に使用していました)。だからここに私のコンポーネントである -

コントローラ(./Controllers/AccountController.cs)

using BitHost.Models; 
using System.Web.Mvc; 

namespace BitHost.Controllers 
{ 
    public class AccountController : Controller 
    { 
     // GET: Account 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult Register() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Register(UserAccount model) 
     { 
      string sEmailAddress = model.EmailAddress; 
      string sPassword = model.Password; 
      bool bAgreedToTerms = model.AgreedToTerms; 

      return Redirect("/"); 
     } 
    } 
} 

ViewModelに(./Models/AccountModel.cs)

namespace BitHost.Models 
{ 
    public class UserAccount 
    { 
     public string EmailAddress; 
     public string Password; 
     public bool AgreedToTerms; 
    } 
} 

見ます(./Views/Account/Register.cshtml)

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
    ViewBag.Title = "Register"; 
} 

@model BitHost.Models.UserAccount 

<div class="row"> 
    <h2>Create a new account</h2> 
    @using (Html.BeginForm()) 
    { 
     <div class="input-group"> 
      <span class="input-group-addon"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span></span> 
      @Html.TextBoxFor(model => model.EmailAddress, new { Class = "form-control", Placeholder = "Email Address" }) 
     </div><br /> 
     <div class="input-group"> 
      <span class="input-group-addon"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></span> 
      @Html.TextBoxFor(model => model.Password, new { Class = "form-control", Type = "password", Placeholder = "Password" }) 
     </div><br /> 
     <div class="input-group"> 
      <span class="input-group-addon"><span class="glyphicon glyphicon-lock" aria-hidden="true"></span></span> 
      <input type="password" class="form-control" placeholder="Verify Password" /> 
     </div><br /> 
     <div class="input-group"> 
      @Html.CheckBoxFor(model => model.AgreedToTerms, new { Class = "form-control" }) 
     </div><br /> 

     <input type="submit" name="Submit" class="btn btn-default" /> 
    } 
</div> 

は、登録フォームに「送信」をクリックした後、私はアカウントを作成し、[HttpPost]アクションを取られますか、しかし、変数はすべて、NULL値を含むモデルから集められました。

ご協力いただきありがとうございます、ありがとうございます。

+0

のように編集あなたのコントローラに何も保存していないので、 'new {@class =" form-control "、type =" password "、placeholder =" Password "}' – jrummell

+0

あなたは初期化してすぐに 'return redirect'と言っています。 –

+0

@AgustinMeriles彼のアクションメソッドは、彼の最初の 'Register ActionResult'が' HttpGet'であり、他の 'Register ActionResult'が' HttpPost'なので、同じ名前を付けることができます。 –

答えて

6

UserAccountが正しくありません。例えば、私はなぜそれがnull値を投稿していますわからないんだけど、あなたが小文字にごhtmlAttributesパラメータを変更することになるでしょう。この

UserAccount

+0

私は 'get'と' set'アクセサについて考えていませんでした。固体ピックアップ –

+0

ええ。良いキャッチ。私はこのことがどれほど頻繁に見られるのか驚いていますが、それを探すのは決して私には起こりません。私はプロパティを見るのに慣れていると思う。私の脳は '{get;セット; } '彼らはそこにいなくても。 –

+2

@MrDKOz:あなたが現在「フィールド」と呼んでいるのは、自動実装されていても、「プロパティ」にはゲッターとセッターがあります。プロパティのみにバインドすることができます。 –

関連する問題