【发布时间】:2015-08-23 07:06:41
【问题描述】:
所以在我的 MVC 项目中,我有一个名为 Survey 的自定义模型,其中包含一些属性。在调查控制器中,我将调查保存到会话变量中,以便调查属性的值在每个会话中保持不变。
我希望能够根据会话调查的属性值来操作视图的 DOM。但我在如何访问这些方面遇到了麻烦。
我确实发现了这个看起来非常相似但没有答案的相对较新的问题:Cannot access properties of model in javascript
这是我目前所拥有的:在视图中,我得到了这样的会话调查:
<input type="hidden" name="activeS" value="@HttpContext.Current.Session("Survey")" />
然后在底部的部分脚本中,我有这个脚本来获取该值并对其进行处理:
@Section Scripts
@Scripts.Render("~/bundles/jqueryval")
<script type="text/javascript">
$(function () {
var survey = $("[name=activeS]").val();
$("[name=mddbccu][value=" + survey.mddbccu + "]").prop('checked', true);
})
</script>
End Section
如果我插入“警报(调查);”在“var调查...”之后它确实给了我一个警报,显示调查对象的类型。所以看起来调查正在被很好地检索。但如果我尝试“alert(survey.mddbccu);”警报只是说“未定义”。
请注意,我知道之后的行 ("$([name=mddbccu]...") 我知道有效 - 之前已将变量设置为特定值,使用该适当的项目进行检查。但在尝试获取调查的这个特定属性的值,没有任何检查。
那么我如何在此处获取调查属性的值?谢谢!
【问题讨论】:
-
您的 javascript val() 只会返回一个字符串,而不是一个对象。如果 Session("Survey") 是 C# 对象,它将不包含您需要的属性。您必须将所需的各个调查属性序列化到单独的隐藏字段中或提出其他解决方案
-
@br4d - 谢谢。如果我将每个单独的属性序列化为视图中的隐藏字段,那么我将如何访问剃刀中的那些?或者您有其他解决方案的建议吗?
-
如果视图本身根据会话发生变化,您可能需要考虑将该逻辑移动到 ViewModel 中(并将其填充到 Controller 的操作方法中),而不是只在视图中执行所有逻辑自己使用剃须刀。
-
@br4d - 如果我改用 ViewModels,我是否仍然没有必须根据会话变量的值指定检查哪些单选按钮的问题?我该怎么做呢?
-
检查新答案
标签: javascript jquery asp.net-mvc session