使用javascript将MVC3 Pass Model视图发送到控制器

时间:2013-01-11 09:48:00

标签: javascript asp.net-mvc-3 razor

我正在尝试使用javascript将模型从视图传递到控制器。但它返回空值。

这是我的看法 的 Newcamp.chstml

 <input type="submit" value="Preview" id="ClickMe" class="cssLoginButton blue"/>

<script type="text/javascript">
 function OpenWindow(query, w, h, scroll) {
     var l = (screen.width - w) / 2;
     var t = (screen.height - h) / 2;

     winprops = 'resizable=0, height=' + h + ',width=' + w + ',top=' + t + ',left=' + l + 'w';
     if (scroll) winprops += ',scrollbars=1';
     var f = window.open(query, "_blank", winprops);
 }


 $(function () {
     $('#ClickMe').click(function () {
             OpenWindow('@Url.Action("NewCampEmail", "Camp",new{model = @Model})', 700, 700, true);
     });
 });
</script>

我的控制器操作 NewCampEmail

    [HttpGet]
    [OutputCache(Location = OutputCacheLocation.None)]
    [Authorize]
    public ActionResult NewCampEmail(Models.NewCamp model)
    {            
        return ReturnModelWithEmailType(model,EmailType.NewCampEmail);
    }

模型中,我获得空值。为什么我得到空值?我的代码有什么变化吗?我的模型在 NewCamp.chstml 中是相同的,即Models.Newcamp

1 个答案:

答案 0 :(得分:0)

你不能以这种方式通过javascript传递@Model。模型仅存在于服务器端,用于在发送它的http响应之前创建页面。你当然可以从模型中获取“值”并将它们作为包含物发送给控制器,但是没有办法以这种方式引用实际的模型本身。

如果您想引用单个Model而不是页面上的属性等,那么您最好的选择是查看knockoutjs(一个无关紧要的好运动)或类似内容。

简而言之,一旦页面被渲染,@模型就消失了,只能通过页面属性或@Model填充的javascript对象来引用...