Я пытаюсь использовать вызов Ajax (я думаю), чтобы обновить значение моей модели, а затем отобразить это новое значение в представлении. Я просто использую это для тестирования на данный момент.
Вот обзор:
MODEL
public class MyModel
{
public int Integer { get; set; }
public string Str { get; set; }
}
CONTROLLER
public ActionResult Index()
{
var m = new MyModel();
return View("Test1", m);
}
[HttpPost]
public ActionResult ChangeTheValue(MyModel model)
{
var m = new MyModel();
m.Str = model.Str;
m.Str = m.Str + " Changed! ";
m.Integer++;
return View("Test1", m);
}
VIEW
@model Test_Telerik_MVC.Models.MyModel
@using Test_Telerik_MVC.Models
@{
ViewBag.Title = "Test1";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
Test1</h2>
@if (false)
{
<script src="~/Scripts/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery-ui.min.js" type="text/javascript"></script>
}
<h2>
ViewPage1
</h2>
<div>
<input type="button" onclick="changeButtonClicked()" id="changeButton" value="Click Me!" />
<input type="text" value="@Model.Str" class="txt" id="str" name="Str"/>
<div></div>
</div>
<script type="text/javascript">
function changeButtonClicked() {
var url = '@Url.Action("ChangeTheValue", "Test1")';
var data = '@Model';
$.post(url, data, function (view) {
$("#Str").value = '@Model.Str';
});
}
</script>
В основном представление отображает кнопку с текстовым полем. Моя единственная цель - просто отобразить значение моей модели (свойство Str) в текстовом поле.
Я попробовал различные комбинации функции changeButtonClicked() безрезультатно. Test1 - это имя моего контроллера. Я не понимаю, когда я его отлаживаю, действие контроллера срабатывает и правильно устанавливает мои значения. Если я помещаю точку останова в разделе "@Model.Str" входного тега, это показывает мне, что мой @Model.Str равен Изменен! что правильно. Однако, как только моя функция успеха срабатывает в javascript, значение возвращается к исходному значению.
Я могу заставить его работать, изменив тип ввода, чтобы отправить и обернуть его в разделе @Html.BeginForm(), но мне интересно, как и как это сделать? Или представляет собой единственный способ сделать это?
Спасибо