Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JQuery中[Model]类型的对象的访问属性_Javascript_Jquery_Asp.net Mvc_Session - Fatal编程技术网

Javascript JQuery中[Model]类型的对象的访问属性

Javascript JQuery中[Model]类型的对象的访问属性,javascript,jquery,asp.net-mvc,session,Javascript,Jquery,Asp.net Mvc,Session,所以在我的MVC项目中,我有一个名为Survey的定制模型,它包含一些属性。在测量控制器中,我将测量保存到会话变量中,以便每个会话都保留测量属性的值 我希望能够基于会话调查属性的值操纵视图的DOM。但我在如何访问这些方面遇到了麻烦 我确实发现这个相对较新的问题,看起来非常相似,但没有答案: 到目前为止,我的情况如下:在我看来,这次会议的调查结果如下: <input type="hidden" name="activeS" value="@HttpContext.Current.S

所以在我的MVC项目中,我有一个名为Survey的定制模型,它包含一些属性。在测量控制器中,我将测量保存到会话变量中,以便每个会话都保留测量属性的值

我希望能够基于会话调查属性的值操纵视图的DOM。但我在如何访问这些方面遇到了麻烦

我确实发现这个相对较新的问题,看起来非常相似,但没有答案:

到目前为止,我的情况如下:在我看来,这次会议的调查结果如下:

     <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
@节脚本
@Scripts.Render(“~/bundles/jqueryval”)
$(函数(){
var-survey=$(“[name=activeS]”)val();
$(“[name=mddbccu][value=“+survey.mddbccu+”]”)prop('checked',true);
})
端部
如果我在“var survey…”之后插入“alert(survey);”,它确实会给我一个警报,显示调查对象的类型。因此,调查似乎正在顺利恢复。但是,如果我尝试“alert(survey.mddbccu);”的话,警报只会说“undefined”

请注意,我知道后面的行(“$([name=mddbccu]…”)有效-之前已将变量设置为特定值,并使用该行检查相应的项。但在尝试获取调查的此特定属性的值时,未检查任何内容


那么,我如何在这里获得调查属性的值呢?谢谢!

您的方法可以使用一些黑客技术和变通方法,但它不符合MVC的精神。以下是您如何以MVC的方式完成它。基本上,您可以移动所有繁重的工作(解析会话中的项目)将0添加到控制器,并将结果存储在ViewModel中。这样可以将逻辑排除在视图之外,并使代码更清晰、更易于维护

如果您有一个ViewModel:

public ActionResult Survey()
{
    SurveyViewModel model = new SurveyViewModel();

    Survey surveySession = HttpContext.Current.Session("Survey") as Survey; // youll have to do extra null checks and such here

    // map other properties from the survey object retrieved from the session to your viewmodel here!
    model.mddbccu = surveySession.mddbccu;
    model.otherProperty = surveySession.otherProperty

    return View(model);
}
如果仅将测量对象用作视图中的模型,则其更简单:

public ActionResult Survey()
{
    Survey model = HttpContext.Current.Session("Survey") as Survey;
    return View(model);
}

然后,MVC会根据您在控制器中设置的内容神奇地为您选择内容。如果您正在使用
@radiobutton(m=>m.mddbccu,“三”)
则如果值“三”被放入控制器中的属性mddbccu中,则会选择收音机。

您的javascript val()只是返回一个字符串,而不是一个对象。它不会包含会话(“调查”)所需的属性是一个C#对象。您必须将所需的各个测量属性序列化到单独的隐藏字段中,或想出其他方法solution@br4d-谢谢。如果我要将每个单独的属性序列化为视图中的隐藏字段,那么我将如何访问razor中的这些属性?或者您是否建议是否有其他解决方案?如果视图本身根据会话而改变,您可能需要考虑将该逻辑移动到VIEW模型中(并将其填充到控制器的动作方法中)。与其使用razor在视图本身中执行所有这些逻辑,不如使用ViewModels。@br4d-如果我改用ViewModels,我是否还存在必须根据会话变量的值指定检查哪些单选按钮的问题?我该怎么做呢?检查新的答案哦,伙计……这是一种更好的方法!我不能o使用使调查对象成为视图中的模型的方法使其工作。我承认关于MVC还有很多我不完全理解的地方……但这确实有帮助。非常感谢!