在 ASP.NET MVC/Razor 视图中,您可以使用 jQuery AJAX 从服务器端 Razor 视图模型获取数据并传递给客户端 JavaScript。这通常用于在不刷新整个页面的情况下动态获取或更新数据。
$(document).ready(function() {
var modelProperty = '@Model.PropertyName'; // 直接获取 Razor 模型属性
console.log(modelProperty);
});
public class HomeController : Controller
{
public ActionResult GetModelData()
{
var model = new YourViewModel
{
Property1 = "Value1",
Property2 = 123
};
return Json(model, JsonRequestBehavior.AllowGet);
}
}
$.ajax({
url: '@Url.Action("GetModelData", "Home")',
type: 'GET',
dataType: 'json',
success: function(data) {
console.log(data.Property1); // 输出: Value1
console.log(data.Property2); // 输出: 123
},
error: function(xhr, status, error) {
console.error("Error: " + error);
}
});
@Html.HiddenFor(model => model.PropertyName, new { id = "hiddenProperty" })
var propertyValue = $('#hiddenProperty').val();
问题: Razor 输出到 JavaScript 时,特殊字符可能导致语法错误。
解决方案:
var modelProperty = '@Html.Raw(Json.Encode(Model.PropertyName))';
问题: C# DateTime 转换为 JSON 后格式不兼容。
解决方案:
return Json(new {
DateProperty = Model.DateProperty.ToString("yyyy-MM-ddTHH:mm:ss")
}, JsonRequestBehavior.AllowGet);
问题: 如果 AJAX 请求跨域,可能会被浏览器阻止。
解决方案:
public class UserViewModel
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime JoinDate { get; set; }
}
public ActionResult UserProfile()
{
var model = new UserViewModel
{
Name = "张三",
Age = 30,
JoinDate = DateTime.Now
};
return View(model);
}
public JsonResult GetUserData()
{
var model = new UserViewModel
{
Name = "李四",
Age = 25,
JoinDate = DateTime.Now.AddDays(-10)
};
return Json(model, JsonRequestBehavior.AllowGet);
}
<div>
<h2>用户信息</h2>
<p id="nameDisplay">姓名: @Model.Name</p>
<p id="ageDisplay">年龄: @Model.Age</p>
<p id="dateDisplay">加入日期: @Model.JoinDate.ToString("yyyy-MM-dd")</p>
<button id="refreshBtn">刷新数据</button>
@Html.HiddenFor(model => model.Name, new { id = "hiddenName" })
</div>
<script>
$(function() {
// 直接从 Razor 获取数据
var initialName = '@Model.Name';
console.log("初始姓名: " + initialName);
// 从隐藏字段获取数据
var hiddenName = $('#hiddenName').val();
console.log("隐藏字段姓名: " + hiddenName);
// AJAX 获取新数据
$('#refreshBtn').click(function() {
$.ajax({
url: '@Url.Action("GetUserData", "Home")',
type: 'GET',
success: function(data) {
$('#nameDisplay').text("姓名: " + data.Name);
$('#ageDisplay').text("年龄: " + data.Age);
$('#dateDisplay').text("加入日期: " +
new Date(data.JoinDate).toLocaleDateString());
},
error: function() {
alert('加载数据失败');
}
});
});
});
</script>
没有搜到相关的文章