У меня сложная сущность. Пользователь:
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; }
}
где Такси является родителем Пользователя (Такси имеет много пользователей):
public class Taxi : BaseEntity
{
public virtual string Name { get; set; }
public virtual string ClientIp { get; set; }
}
BaseEntity состоит из публичного виртуального int Id {get; приватный набор; }
Проблема возникает при попытке редактировать пользователя
[Authorize]
public ActionResult ChangeAccountInfo()
{
var user = UserRepository.GetUser(User.Identity.Name);
return View(user);
}
My 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.Id == 0 -> Пользовательский объект имел 5 до редактирования
User.Login == "мой новый логин"
User.Password == "мой новый пароль"
User.Taxi.Id == 0 -> У объекта User.Taxi было 3 до редактирования
User.Taxi.Name == "старое скрытое имя"
User.Taxi.ClientIp == null -> Пользовательский объект имел 192.168.0.1 до редактирования
Q:
Можно ли не пометить все поля объекта (которые должны быть в моем UpdateUser) тегом «скрытый», но при этом они остаются неизменными в моем методе HttpPost?
например не User.Taxi.ClientIp = null, но User.Taxi.ClientIp = 192.168.0.1
Я использую nhibernate, если это имеет значение.