【问题标题】:MVC3 Pass Model view to controller using javascriptMVC3 使用 javascript 将模型视图传递给控制器
【发布时间】:2013-01-11 09:48:00
【问题描述】:

我正在尝试使用 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);
    }

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

【问题讨论】:

  • 传递给控制器​​的模型是否与从控制器传递给视图的模型相同?如果您只将模型从视图传递到控制器,而之前没有将模型从控制器传递到视图,那么您正在破坏 MVC 模式,因为它的行为是通过将模型从控制器传递到视图而不是将模型从视图传递到控制器。
  • @jobert 谢谢你的回复。我已经通过相同的模型来查看
  • 如果你想将一些数组或一些集合作为参数传递给控制器​​,请改用 Json

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


【解决方案1】:

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

如果您想引用单个 Model,而不是页面上的属性等,最好的办法是查看 knockoutjs(一个很好的练习)或类似内容。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多