我有一个接受两个字符串参数的MVC控制器,但我只会使用其中一个。我不确定如何最好地处理这种情况。我需要找到一种传递NULL的方法,以便不使用任何参数。我设置它的方式现在传递参数get到Action但未使用的参数是空的,我需要它为NULL,一切都将按我的需要工作。我知道我可以做一个“if”语句并动态构建@ URL.Action链接,但这看起来很笨拙。我还看到了一些建议自定义路线的帖子,但我希望在我走这条路线之前听取用户的意见。必须有一个更简单的方法。
我的路由到新网址的功能:
$('#poBtn').on('click', function (e) {
var poId = $('#PoLabel').val();
var reqId = $('#ReqLabel').val();
var url = '@Url.Action("ShipmentsByPo", "Shipping", new {po = "_poId_" , reqId = "_reqId_" })';
url = url.replace('_poId_', poId);
url = url.replace('_reqId_', reqId);
window.location.href = url;Action
})
动作:
public IEnumerable<ShippingHeaderVM> ShipmentsByPo(string po, string reqID )
{
object[] parameters = { po, reqID };
var shipmentsByPo = context.Database.SqlQuery<ShippingHeaderVM>("spSelectLOG_ShippingNoticeByPo {0},{1}",parameters);
return shipmentsByPo.ToList();
}
答案 0 :(得分:1)
一种可能的解决方案是在参数为空时检查控制器操作内部,在使用它之前将其设置为null。
另一种可能性是在客户端上撰写一个或另一个网址:
$('#poBtn').on('click', function (e) {
e.preventDefault();
var poId = $('#PoLabel').val();
var reqId = $('#ReqLabel').val();
var url = '@Url.Action("ShipmentsByPo", "Shipping", new { po = "_poId_" })';
if (poId != '') { // Might need to adjust the condition based on your requirements
url = url.replace('_poId_', encodeURIComponent(poId));
} else {
url = '@Url.Action("ShipmentsByPo", "Shipping", new { reqId = "_reqId_" })';
url = url.replace('_reqId_', encodeURIComponent(reqId));
}
window.location.href = url;
});