Вы хотите функцию окна:
select distinct market,
sum(rn) over (partition by market) as rn,
sum(rn) over () as Total
from view1 v1;
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.
Какой ключ вы используете, когда вы устанавливаете значение в ModelState при ошибке? Код, который устанавливает параметр значения для TextBox, выглядит следующим образом:
Соответствующая часть загруженного фреймворкового кода .
string attemptedValue = (string)htmlHelper.GetModelStateValue(name, typeof(string));
tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(name) : valueParameter), isExplicitValue);
Как вы можете видеть, существует ли значение попытки, оно будет использовать его - но только если доступен тот же ключ.
Я знаю, что это работает, потому что у меня есть действие, которое не принимает параметров и получает значения непосредственно из ValueProvider, и оно использует AddModelError, чтобы указать ошибки проверки. Я уверен, что значения в моих текстовых окнах сохраняются.
РЕДАКТИРОВАТЬ : Для того чтобы значения были сохранены, их необходимо каким-то образом связать с моделью. Один из способов сделать это - добавить их в список параметров. Другой способ - использовать UpdateModel (с именами параметров в белом списке или без белого). Третий способ - добавить параметр явно в модель, как в ответе @ Jenea. Поскольку помощник извлекает только из состояния модели, они должны быть там, чтобы значения были сохранены. Он не смотрит на свойство формы запроса.
Насколько я понимаю, решение таково:
[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()));
}
удачи!
Ой, я только что улучшил дизайн своего приложения. Проблема возникает из-за того, что у вас есть настраиваемая проверка (у меня тоже). Вы должны добавить после
ModelState.AddModelError()
это
ModelState.SetModelValue("MinVolume", ValueProvider["MinVolume"]);
По-видимому, это должно быть
Mimum:<%=Html.Textbox("MinVolume")%>
Все еще не уверен, почему это работает, но у меня это сработало.
Another solution is if you type in view:
<%var minVolume=Request["MinVolume"]??"";%>
<%=Html.Textbox("MinVolume",minVolume,new {size=5})%>
Пожалуйста, обратитесь к этой статье, чтобы увидеть различные способы обработки обратной передачи в ASP.NET MVC