Tôi đang cố gắng sử dụng lệnh gọi Ajax (tôi nghĩ) để cập nhật giá trị mô hình của mình và sau đó có giá trị mới được phản ánh trong chế độ xem. Tôi chỉ sử dụng nó cho mục đích thử nghiệm cho thời điểm này.Cập nhật Xem với Thay đổi mô hình qua Ajax Post - MVC3
Dưới đây là tổng quan về:
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);
}
XEM
@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>
Về cơ bản, chế độ xem hiển thị nút có hộp văn bản. Mục tiêu duy nhất của tôi là chỉ hiển thị giá trị của mô hình của tôi (thuộc tính Str) trong hộp văn bản.
Tôi đã thử các kết hợp khác nhau của hàm changeButtonClicked() không có kết quả. Test1 là tên của bộ điều khiển của tôi. Những gì tôi không hiểu là khi tôi gỡ lỗi nó, hành động điều khiển cháy và đặt giá trị của tôi một cách chính xác. Nếu tôi đặt điểm ngắt trên phần "@ Model.Str" của thẻ đầu vào, nó cho tôi thấy rằng @ Model.Str của tôi bằng với Thay đổi! đó là chính xác. Tuy nhiên, ngay sau khi hàm thành công của tôi kích hoạt trong javascript, giá trị sẽ trả về giá trị ban đầu của nó.
Tôi có thể làm cho nó hoạt động bằng cách thay đổi kiểu đầu vào để gửi và gói nó trong phần @ Html.BeginForm() nhưng tôi tự hỏi nếu/làm thế nào để làm điều đó như thế này? Hoặc là Gửi một cách duy nhất để hoàn thành nó?
Cảm ơn
Bạn thân mến, điều đó thật tuyệt vời. Tôi sẽ chạy qua những gì bạn đã nói sau và cho bạn biết. Tôi hy vọng những gì bạn đã mô tả không hoạt động. Chúc mừng – Jason
ok, tôi có nó hoạt động. JSon như bạn nói là cách để đi trong trường hợp này. Tuy nhiên, đặt giá trị cụ thể vẫn có nghĩa là đối tượng "Mô hình" của tôi không bao giờ chứa các giá trị được cập nhật? Vì vậy, nếu tôi đề cập đến nó trong một sự kiện khác (nói sau khi một trong những điều này đã bắn), @ Model.Str không thực sự chứa giá trị mới. Để điều đó xảy ra, tôi cần phải nộp? Cảm ơn câu trả lời của bạn cho đến nay. Nó trả lời câu hỏi ban đầu của tôi. – Jason
Nếu bạn muốn nhận được giá trị mới nhất của các đầu vào của mình, bạn sẽ muốn lấy chúng từ chính đầu vào, bạn có thể nhận được điều này với jQuery $ (# Str) .val(). Nếu không, nếu bạn đang sử dụng Model.Str ở một nơi khác trong mã javascript của bạn, giá trị đó của Model.Str đang được đặt khi trang tải lần đầu tiên và sẽ không bao giờ được cập nhật, trừ khi bạn làm mới toàn bộ trang. – ajrawson