【发布时间】:2011-10-14 05:35:59
【问题描述】:
我正在尝试使用 Ajax(我认为)调用来更新我的模型值,然后让该新值反映在视图中。目前我只是将其用于测试目的。
概述如下:
型号
public class MyModel
{
public int Integer { get; set; }
public string Str { get; set; }
}
控制器
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);
}
查看
@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 等于 Changed!哪个是对的。但是,一旦我的成功函数在 javascript 中触发,该值就会恢复为原始值。
我可以通过更改要提交的输入类型并将其包装在 @Html.BeginForm() 部分中来使其工作,但我想知道是否/如何这样做?还是提交是完成它的唯一方法?
谢谢
【问题讨论】:
标签: asp.net asp.net-mvc-3 razor