ASP.Net MVC ModelState / HTML. Проблема обратной передачи TextBox

Вы хотите функцию окна:

select distinct market, 
       sum(rn) over (partition by market) as rn, 
       sum(rn) over () as Total
from view1 v1;
5
задан tereško 30 August 2013 в 20:30
поделиться

6 ответов

Could it be that your code:

<%= Html.TextBox("MinVolume", null, new { size = 5 })%>

..has the null for the default value param? Maybe if you change the null to Model.MinVolume it will persist the value. Like this:

<%= Html.TextBox("MinVolume", Model.MinVolume, new { size = 5 })%>

I'm not sure if your action returns the value MinVolume in the model tho. If it does, the above should work. Else, you may need to refactor the action slightly.

4
ответ дан 18 December 2019 в 14:51
поделиться

Какой ключ вы используете, когда вы устанавливаете значение в ModelState при ошибке? Код, который устанавливает параметр значения для TextBox, выглядит следующим образом:

Соответствующая часть загруженного фреймворкового кода .

string attemptedValue = (string)htmlHelper.GetModelStateValue(name, typeof(string));
tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(name) : valueParameter), isExplicitValue);

Как вы можете видеть, существует ли значение попытки, оно будет использовать его - но только если доступен тот же ключ.

Я знаю, что это работает, потому что у меня есть действие, которое не принимает параметров и получает значения непосредственно из ValueProvider, и оно использует AddModelError, чтобы указать ошибки проверки. Я уверен, что значения в моих текстовых окнах сохраняются.

РЕДАКТИРОВАТЬ : Для того чтобы значения были сохранены, их необходимо каким-то образом связать с моделью. Один из способов сделать это - добавить их в список параметров. Другой способ - использовать UpdateModel (с именами параметров в белом списке или без белого). Третий способ - добавить параметр явно в модель, как в ответе @ Jenea. Поскольку помощник извлекает только из состояния модели, они должны быть там, чтобы значения были сохранены. Он не смотрит на свойство формы запроса.

3
ответ дан 18 December 2019 в 14:51
поделиться

Насколько я понимаю, решение таково:

[Transaction]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(int id, FormCollection form)
{
    T itemToUpdate = repository.Get(id);
    UpdateModel(itemToUpdate, form.ToValueProvider());

    if (itemToUpdate.IsValid())
    {
        repository.SaveOrUpdate(itemToUpdate);
        return Json(ValidationResultToJson(itemToUpdate.ValidationResults()));
    }

    repository.DbContext.RollbackTransaction();
    return Json(ValidationResultToJson(itemToUpdate.ValidationResults()));
}

удачи!

0
ответ дан 18 December 2019 в 14:51
поделиться

Ой, я только что улучшил дизайн своего приложения. Проблема возникает из-за того, что у вас есть настраиваемая проверка (у меня тоже). Вы должны добавить после

ModelState.AddModelError()

это

ModelState.SetModelValue("MinVolume", ValueProvider["MinVolume"]);

По-видимому, это должно быть

Mimum:<%=Html.Textbox("MinVolume")%>

Все еще не уверен, почему это работает, но у меня это сработало.

6
ответ дан 18 December 2019 в 14:51
поделиться

Another solution is if you type in view:

<%var minVolume=Request["MinVolume"]??"";%>
<%=Html.Textbox("MinVolume",minVolume,new {size=5})%>
0
ответ дан 18 December 2019 в 14:51
поделиться

Пожалуйста, обратитесь к этой статье, чтобы увидеть различные способы обработки обратной передачи в ASP.NET MVC

текст ссылки

0
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: