Во-первых, в jQuery правильный способ установить значение для ввода - использовать
$("#Str").val(@Model.Str);
Далее мы рассмотрим контроллер, в результате действия Post вы вернете весь View в вашем вызове ajax. Это означает, что все html, ссылки на скрипты и javascript возвращаются в вашем пост-запросе jquery. Поскольку все, что вы пытаетесь обновить, это значение ввода с именем str, я бы просто вернул это значение как json и ничего больше.
[HttpPost]
public ActionResult ChangeTheValue(MyModel model)
{
var m = new MyModel();
m.Str = model.Str;
m.Str = m.Str + " Changed! ";
m.Integer++;
return Json(m.Str);
}
Далее я бы поместил ваши html-входы в так, чтобы вы могли jQuery сериализовать вашу модель для вас, а затем вы можете изменить свой почтовый индекс JQuery на:
function changeButtonClicked() {
var url = '@Url.Action("ChangeTheValue", "Test1")';
$.post(url, $('form').serialize(), function (view) {
$("#Str").val(view);
});
}
Все, что делает сериализация, это кодирует входные данные в вашей форме в строку, и, если все будет названо правильно, aps.net свяжет это с вашей моделью.
Если вам нужно, чтобы ваш маршрут обрабатывал как ajax-вызовы, так и полные запросы, вы можете использовать функцию IsAjaxRequest asp.net для проверки запроса и возврата разных результатов в зависимости от того, является ли запрос ajax или нет. Вы бы сделали что-то вроде этого в вашем контроллере:
[HttpPost]
public ActionResult ChangeTheValue(MyModel model)
{
var m = new MyModel();
m.Str = model.Str;
m.Str = m.Str + " Changed! ";
m.Integer++;
if (Request.IsAjaxRequest) {
return Json(m.Str);
}
else {
return View("Test1", m);
}
}
В приведенном выше результате действия вы делаете все, что делали раньше, но сейчас тестируете тип запроса и, если это ajax, вы возвращаете результат Json вашего строкового значения. Если запрос был не от вызова ajax, тогда полный просмотр (html, скрипты и т. Д.) Возвращается для отображения в браузере.
Надеюсь, это поможет вам и то, что вы искали.