将值从视图传递到控制器,我错过了啥?
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 发布请求将值从一个视图传递到另一个视图