2016-05-01 9 views
1

ここで私は投稿するつもりビューです:モデル複雑なオブジェクトに対しては動作しません結合

@model WelcomeViewModel 
@using (Html.BeginForm("SignUp", "Member", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post)) 
{ 

    .... 
    <div class="form-group"> 
     @Html.EditorFor(model => model.SignUp.CompanyName, new {htmlAttributes = new {@class = "form-control" }}) 
    </div> 
    <div class="form-group"> 
     @Html.EditorFor(model => model.SignUp.RegisteredNo, new {htmlAttributes = new {@class = "form-control" } }) 
    </div> 
    .... 
    <button type="submit" name="signup" class="btn">Register</button> 
} 

のViewModel:

public class WelcomeViewModel 
{ 
    public SignInViewModel LogOn { get; set; } 
    public SignUpViewModel SignUp { get; set; } 
} 

対処方法:

[HttpPost, AllowAnonymous, ValidateAntiForgeryToken] 
public virtual async Task<ActionResult> SignUp(SignUpViewModel model) 
{ 
    if (!ModelState.IsValid) 
     return View("SignIn", new WelcomeViewModel { SignUp = model }); 

    // other code 
    return View(); 
} 

Iデータをポストすると、モデルはnullになります。

<input id="SignUp_CompanyName" name="SignUp.CompanyName"> 

しかし、モデルバインダーがこれを受け入れる:

<input id="SignUp_CompanyName" name="CompanyName"> 

今、私はどのように私はその接頭辞を削除することができます知ってほしい私は入力は次のように生成されます知っていますか?

@Html.TextBoxFor(model => model.SignUp.CompanyName, new { Name = "CompanyName" }) 

名前を明示的に追加することができますが、強く入力する必要があります。

+1

を参照してくださいあたりhaim770の答えとして、 '[バインド]'属性を使用しますか、 'WelcomeViewModel'をポストバックする(' SignUpViewModel'ではなく) –

答えて

0

おそらく最も簡単な方法は、「新規アカウント」にそのPrefixセットで[Bind]属性を適用するために、次のようになります。

public async Task<ActionResult> SignUp([Bind(Prefix="SignUp")] SignUpViewModel model) 

どちらかMSDN

関連する問題