モデル値を更新してその新しい値をビューに反映させるためにAjax(私が思う)呼び出しを使用しようとしています。私はちょうどその時のテスト目的のためにこれを使用しています。ここでAjax Post-MVC3によるモデルの変更によるビューの更新
は概要です:
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がChanged!と等しいことがわかります!どちらが正しい。しかし、私の成功関数がjavascriptで発生するとすぐに、値は元の値に戻ります。
@ Html.BeginForm()セクションで送信する入力タイプを変更してラップすることで動作させることができますが、このようにするにはどうすればいいですか?または、それを達成するための唯一の方法を提出していますか?
おかげで、入力の値を設定するための適切な方法は、我々はあなたがポストアクションの結果では、コントローラを見てみましょう
$("#Str").val(@Model.Str);
次を使用することであるjQueryので
メイト、それは素晴らしいです。私はあなたが少し後に言ったことを実行し、あなたに知らせるでしょう。私はあなたが説明したことがうまくいくことを期待しています。乾杯、 – Jason
よろしくお願いします。あなたが言うようにJSonはこのインスタンスに入る方法です。しかし、値を設定することは、私の "Model"オブジェクトには更新された値が決して含まれないことを意味します。だから私が別のイベントでこれを参照すると(これが発生した後)、@ Model.Strは実際には新しい値を含んでいません。それが起こるためには、私は提出する必要がありますか?これまでのあなたの答えに感謝します。私の最初の質問に答える。 – Jason
入力値から最新の値を取得したい場合は、jQuery $(#Str).val()で取得できます。それ以外の場合は、JavaScriptのコードでModel.Strを使用している場合は、ページが最初にロードされたときにModel.Strの値が設定されており、更新されません。 – ajrawson