Hier ist die Ansicht, die ich schreiben werde:Modell Bindung für komplexes Objekt nicht funktioniert
@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>
}
Ansichtsmodell:
public class WelcomeViewModel
{
public SignInViewModel LogOn { get; set; }
public SignUpViewModel SignUp { get; set; }
}
Methode Aktion:
[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();
}
Als ich Veröffentlichen Sie die Daten, das Modell wird null. Ich weiß, dass die Eingänge wie generiert werden:
<input id="SignUp_CompanyName" name="SignUp.CompanyName">
Aber das Modell Binder übernimmt dies:
<input id="SignUp_CompanyName" name="CompanyName">
Jetzt möchte ich wissen, wie kann ich das Präfix entfernen? Ich weiß, dass ich Namen für jeden Eingang explizit hinzufügen kann:
, aber ich möchte es in einer starken Art Weise tun.
Siehe entweder das '[Bindung]' Attribut als pro haim770 Antwort oder 'WelcomeViewModel' (nicht 'SignUpViewModel') zurückschreiben –