Мы хотим выполнить некоторые вычисления для некоторых значений в представлении ... поэтому, когда пользователь вводит значение во вход ... мы хотим вернуться на сервер ... выполнить вычисления и "обновить" просмотр с новыми значениями ... С таким кодом, как он есть, он вводит правильное (... или, по крайней мере, тот, о котором я его просил) действие контроллера, правильно выполняет вычисления и возвращает обновленные ViewData в представление. Когда я выполняю цикл, который создает html для представления, у ViewData есть обновленные значения, но когда представление отображается в браузере, значения не изменились ...
Вот JavaScript
$('input.changeValue').change(function() {
$('body').css('cursor', 'wait');
var changedAmt = this.value;
var frmUpdate = $('form#frmUpdate').serializeArray();
fooSoldObj = new Object();
fooSoldObj.name = 'fooSoldAmt';
fooSoldObj.value = changedAmt;
frmUpdate[frmUpdate.length] = fooSoldObj;
$.ajax(
{
type: $('form#frmUpdate')[0].method,
url: $('form#frmUpdate')[0].action,
data: frmUpdate,
dataType: 'html',
error: function(error) {
alert('frmUpdate error' + error);
}
}
);
setTimeout(function() {
$('body').css('cursor', 'default');
}, 0);
});
Вот как выглядит HTML для формы frmUpdate
<form action="/Forecast/Update" id="frmUpdate" method="post" name="frmUpdate">
<span>
<input id="HiddenForecastID" name="HiddenForecastID" type="hidden" value="XXX" />
<input id="HiddenForecastYear" name="HiddenForecastYear" type="hidden" value="2009" />
<input id="HiddenForecastMonth" name="HiddenForecastMonth" type="hidden" value="3" />
</span>
</form>
Теперь, чтобы еще больше сбить с толку, данные, которые отображаются неправильно, находятся в другом виде в представлении. Причина (правильная или неправильная) у меня есть две формы в том, что другая форма в представлении запускает процедуру сохранения.
Вот соответствующая часть действия контроллера
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Update(FormCollection frmUpdate)
{
//go off and do some stuff...this part works as the ViewData
//is correct....meaning it has the updated values that
//we want to see displayed in the view
return View("MyView", ViewData[someData]);
}
Я думаю, что, возможно, причина, по которой это не работает, заключается в том, что я обновляю одну форму, а затем прошу движок представления MVC обновить / обновить другую форму (но имейте в виду, что когда я выполняю цикл в цикле представление, которое создает страницу, данные обновляются, а страница в браузере - нет) ... Как я могу заставить представление отображать правильный HTML?
/ ********************************************
Добавлен следующий код только для проверки RedirectToAction
Вызов ajax НЕ приводит к ошибке в вышеупомянутых возвратах View ("бла")
********************************************** /
P.S. Только что попробовал RedirectToAction в контроллере, как это
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Update(FormCollection frmUpdate)
{
//go off and do some stuff...this part works as the ViewData
//is correct....meaning it has the updated values that
//we want to see displayed in the view
return RedirectToAction("MyView", new RouteValueDictionary( new { controller = "Forecast", action = "MyView", addMonth = monthAdd } ) );
}
но затем ошибки вызова ajax с ошибкой 500
Спасибо
Грег