我一直在jquery中使用ViewModel的属性。虽然它运行良好,但我只是读取属性的值。为了使用jquery设置属性,我使用隐藏变量。请告诉我这是一个好习惯吗?
if ("@Model.IsTemplate" == "@bool.FalseString") {
$("#someButton").show();
if ("@Model.Active" == "@bool.TrueString") {
$("#activeschedulespan").show();
$("#inactiveschedulespan").hide();
}
请注意,这不是很好,但想知道这是好事还是坏事。如果不好,那么欢迎替代方案。
由于
答案 0 :(得分:1)
这是非常糟糕的做法。我不会将服务器端Razor代码与javascript混合使用。我只是JSON序列化模型(或只是我需要的属性),然后直接操作它:
<script type="text/javascript">
// we serialize the IsTemplate and Active properties of the model because we
// only need them in javascript, but if we needed other properties we could have
// included them as well or serialize the entire model
var model = @Html.Raw(Json.Encode(Model.Select(x => new { x.IsTemplate, x.Active })));
// now that we have the model javascript variable, let's manipulate it:
if (!model.IsTemplate) {
$('#someButton').show();
if (model.Active) {
$('#activeschedulespan').show();
$('#inactiveschedulespan').hide();
}
}
</script>
但是,嘿,为什么我会觉得你使用javascript来做一些应该直接在服务器端完成的事情?在这个特定的例子中,您使用javascript根据您在服务器(您的模型)上知道的值显示/隐藏DOM中的内容。所以你可以完全摆脱这个javascript,并根据模型的属性决定是否在DOM中包含这些部分。
答案 1 :(得分:0)
我不认为这是一个问题。因为在浏览器中呈现时C#代码被编译为文本。如果您在浏览器中看到您的脚本,您会看到类似的内容。
if ("True" == "True") {
$("#someButton").show();
if ("False" == "True") {
$("#activeschedulespan").show();
$("#inactiveschedulespan").hide();
}
考虑@Model.IsTemplate
= true和@Model.Active = false
您可以使用浏览器开发人员工具查看脚本。或者只是查看页面的来源并找到脚本。