2013-06-23 2 views
0

У меня есть очень простой контроллер + ViewASP.NET Razor ViewModel свойство изменяется где-то

public ActionResult Edit(string username) 
{ 
    return View(ComponentFactory.GetAdapter<IUserListAdapter>().Get(username)); 
} 

и

@model BAP.Models.UserList 
@using GrmanIT.Utils.Web 
@using BAP.Models 
@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>Globale Benutzer</legend> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.UserId) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.UserId) 
      @Html.ValidationMessageFor(model => model.UserId) 
     </div> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.UserName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.UserName) 
      @Model.UserName 
      @Html.ValidationMessageFor(model => model.UserName) 
     </div> 
     <div class="editor-label"> 
      @Html.LabelFor(model => model.Bundesland) 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownListFor(model => model.Bundesland, new SelectList((IEnumerable<BAP.Models.Bundesland>)ViewData["BundeslandList"], "Value", "Text")) 
     </div> 
     <div> 
      <input type="submit" value="@LocalizationHelper.LocalizedLiteral("Save").ToString()" /> 
     </div> 
    </fieldset> 
} 
<div> 
    @Html.ActionLink(LocalizationHelper.LocalizedLiteral("BackToList").ToString(), "Index") 
</div> 
@Model.UserName 

это, безусловно, самый простой контроллер и вид мы имеем в нашем MVC4 приложении , BUT - он делает что-то странное: Я получаю TextBox, который создается с помощью @ Html.EditorFor (model => model.UserName) с заполнением UserId режима л вместо UserName

Я отлажена его и его и там, как всегда правильное значение в UserName и UserId. Вы также можете увидеть, что я добавил @ Model.UserName дважды в представлении, чтобы увидеть, правильно ли он получается, и да, он печатает имя пользователя, а не идентификатор.

Я также проверил ссылки на UserName -property и не нашел, что бы изменить его. Мой вопрос: есть ли у вас какие-либо идеи, где код может быть изменен или как можно, если вы узнаете об этом?

Это происходит только на этом одном контроллере на этом одном действии (из ~ 25 контроллеров и ~ 200 действий)

Спасибо вам

ответ

0

Хорошо, это было СНОВА ModelState - как вы можете видеть в код выше - параметр функции называется «имя пользователя», но на самом деле это userId. А так как это уже имя пользователя параметр, он хранится в ModelState и когда я называю

@Html.EditorFor(model => model.UserName) 

она принимает значение от ModelState (где на самом деле UserId хранится под именем остросюжетном параметра)

Таким образом, решением было бы либо вызвать ModelState.Clear(), либо, вернее, переименовать параметр для представления фактического значения.