私は複雑なエンティティユーザーを持っています:
public class User : BaseEntity
{
public virtual Taxi Taxi { get; set; } --> That is why i call it "complex"
public virtual string Login { get; set; }
public virtual string Password { get; set; }
}
Taxi は User の親です (Taxi has-many Users):
public class Taxi : BaseEntity
{
public virtual string Name { get; set; }
public virtual string ClientIp { get; set; }
}
BaseEntity は public virtual int Id { get; プライベートセット; }
ユーザーを編集しようとすると問題が発生する
[Authorize]
public ActionResult ChangeAccountInfo()
{
var user = UserRepository.GetUser(User.Identity.Name);
return View(user);
}
マイ ChangeAccountInfo.aspx
<fieldset>
<legend>Fields</legend>
<% %>
<div class="editor-label">
<%: Html.LabelFor(model => model.Login) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Login) %>
<%: Html.ValidationMessageFor(model => model.Login) %>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Password) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Password) %>
<%: Html.ValidationMessageFor(model => model.Password) %>
</div>
<div class="editor-field">
<%: Html.HiddenFor(model => model.Taxi.Name)%>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
投稿の変更:
[Authorize]
[HttpPost]
public ActionResult ChangeAccountInfo(User model)
{
if (ModelState.IsValid)
{
UserRepository.UpdateUser(model);
return RedirectToAction("ChangeAccountInfoSuccess", "Account");
}
return View(model);
}
しかし、(User モデル) パラメータには User.Id == 0 があります --> User エンティティは編集前に 5でした
User.Login == "my new login"
User.Password == "my new password"
User.Taxi.Id = = 0 --> 編集前の User.Taxi エンティティは 3
User.Taxi.Name == "old hidden name"
User.Taxi.ClientIp == null --> 編集前の User エンティティは 192.168.0.1
Q: エンティティのすべてのフィールド (UpdateUser にある必要があります) をタグ「hidden」でマークせずに、HttpPost メソッドでそれらを変更しないことは可能ですか? 例: User.Taxi.ClientIp = null ではなく、User.Taxi.ClientIp = 192.168.0.1
問題があれば、私はnhibernateを使用しています。