将值从视图传递到控制器,我错过了啥?

Posted

技术标签:

【中文标题】将值从视图传递到控制器,我错过了啥?【英文标题】:Passing value from View to Controller, what am I missing?将值从视图传递到控制器,我错过了什么? 【发布时间】:2014-06-25 21:49:39 【问题描述】:

我的观点如下:

@html.DropDownList("ProductionOrder", null, htmlAttributes: new  @class = "form-control", @id = "ProductionOrder" )

<div class="col-lg-6" id="ProductionOrderDetails"></div>

@section Scripts 
@Scripts.Render("~/bundles/jqueryval")

<script type="text/javascript">
    $(function () 
        $("#ProductionOrder").change(function () 
            var po = $("#ProductionOrder").val().toString();
            //This alert is for debug purpose only
            alert(po);
            $.get('/wetWashRequests/GetDetails/' + po, function (data) 
                $('#ProductionOrderDetails').html(data);
                $('#ProductionOrderDetails').fadeIn('fast');
            );
        )
    )
</script>

然后我的控制器中有以下内容:

public PartialViewResult GetDetails(string PONumber)
                
        var details = db.vwProductionOrderLookups.Where(x => x.No_ == PONumber).SingleOrDefault();
        return PartialView("_ProductionOrderDetails", details);
    

我不明白的是为什么它没有将值传递给控制器​​,或者为什么当我在浏览器中手动输入 URL 时,像这样(http://localhost:51702/wetWashRequests/GetDetails/WO033960),它也没有将它分配给参数,因此不返回数据。

我错过了什么?我以为我走在正确的轨道上,但是...

【问题讨论】:

【参考方案1】:

我认为这个修改会起作用:

$.get('/wetWashRequests/GetDetails?PONumber=' + po,

请注意@malkam 的备注以始终使用:@Url.Action(controller,action)

var url= "@Url.Action("wetWashRequests","GetDetails")"+"?PONumber="+po;

澄清一下:

在您的应用程序启动中,您可能会有默认路由:

routes.MapRoute(
    name: "Default",
    url: "controller/action/id",
    defaults: new  controller = "Home", action = "Index", 
        id = UrlParameter.Optional 
    );

这意味着你可以有类似的 URL:

/wetWashRequests/GetDetails/999

但随后999 被绑定到一个名为id 的参数。

对于所有其他变量,您需要

/wetWashRequests/GetDetails?someParameter=999

语法。

或者,您可以修改路由。

【讨论】:

【参考方案2】:

您需要编辑路由配置以允许controller/action/PONumber 类型的 URL。否则,您也可以通过查询字符串发送PONumber,这样您的 URL 如下所示:

http://localhost:51702/wetWashRequests/GetDetails?PONumber=WO033960

【讨论】:

【参考方案3】:

使用 URL.Action() 方法

var url= "@Url.Action("wetWashRequests","GetDetails")"+"?PONumber="+po;
$.get(url,function(data)

);

【讨论】:

总是使用@Url.Action(controller,action) 而不是'/controller/action' 如果这解决了您的问题,请将其标记为答案 有趣的是,这在@Stefan 的回答中不起作用,而使用查询字符串。也许我手指发胖但我检查了两次......

以上是关于将值从视图传递到控制器,我错过了啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何将值从 tableview 传递到 collectionview

通过 Laravel 中的 AJAX 发布请求将值从一个视图传递到另一个视图

将值从一个视图控制器传递到另一个视图控制器的问题

使用 location.href 将值从视图传递到控制器为 null

将值从模型传递到 CI 中的视图

IOS 将值从 App Delegate 传递到初始视图控制器并在 viewWillAppear 中使用这些值