2015-12-31 6 views
3

Я новичок в MVC 4, Что я хочу сделать это, сделать метку, отображение приращения целогоПочему не изменяются значения @ Html.LabelFor?

в cshtml странице

@Html.LabelFor(m => m.Increment, Model.Increment) 

в контроллере странице

public ActionResult Index(IncrementModel IM){ 
    IM.Increment ++; 
    return View(IM); 
} 

Отправной результат равен 0, нажмите один, чтобы он увеличился до 1, тогда значение навсегда равно 1 независимо от того, сколько раз я нажимаю.

ответ

1

LabelFor вспомогательный метод визуализации такой этикетки.

<label for="Increment">Increment</label> 

Это событие не будет показывать значение вашего свойства Increment of mdoel. Если вы хотите, вы можете просто сделать его как

<p>@Model.Increment</p> 

Или с помощью метода DisplayFor() помощника.

@Html.DisplayFor(s=>s.Increment) 

Это также просто придаст значение вашей странице. Когда вы публикуете форму, она не будет публиковать текущее значение на странице для действия HttpPost. Для этого вам нужно поле формы. Это может быть текстовое поле, скрытое поле и т.д ..

@using(Html.BeginForm()) 
{ 
    @Html.DisplayFor(s=>s.Increment) 
    @Html.HiddenFor(s => s.Increment) 
    <input type="submit"/> 
} 

Но теперь, когда вы размещаете значение и увеличиваем его в методе действия и отправить его обратно, входные поля значение (скрытое поле) не будет обновляется каждый раз с новым значением. Поскольку значение ModelStateDictionary имеет некоторое значение для этого свойства, это значение после первого обновления. Это значение будет использовано, если мы отобразим скрытое поле для свойства Increment. Именно по этой причине вы видите 1 как значение, и оно никогда не меняется.

Что вам нужно сделать, это явно удалить этот элемент из ModelStateDictionary.

[HttpPost] 
public ActionResult Index(IncrementModel IM) 
{ 
    IM.Increment++; 
    ModelState.Remove("Increment"); 
    return View(IM); 
} 
+0

я постараюсь на него, надеюсь, что он работает –

+0

не может, значение не сохранить в ModalState –

+1

Я просто проверил это в простом проекте MVC и полностью работал. Я уверен, что вы что-то упустили из того, что я опубликовал. Пожалуйста, проверьте дважды. – Shyju

0

Метка предназначена только для отображения. Это значение не возвращается на сервер. Вместо этого используйте текстовое поле и поместите его в форму.

@Html.TextBoxFor(m => m.Increment); 
+0

Если я могу предложить добавить скрытую переменную, которая будет представлена ​​вместо текстового поля, что как бы я это сделать – simsim

Смежные вопросы