$('.fn-edit').on('click', function () {
var guid = $(this).attr('data-uid');
var OpdEvalGuid = $(this).attr('data-guid');
window.location = '@Url.Content("~/PDNurse/PDNurseRecord/PDNurseRecordEdit/")' + guid;
});
這是我其中一個按鈕的程式碼,取得參數後會傳到這支程式裡
public ActionResult PDNurseRecordEdit(string id, string OpdEvalGuid)
{
PDNurseRecordViewModel model = GetHDNurseRecordViewMidel(id);
model.OpdEvalGuid = OpdEvalGuid;
model.AdjustFromView();
return View("PDNurseRecordEdit", model);
}
其中,string id 就是取前端的guid這個值
現在有個問題,我想把string id 這個參數明改一下名字
執行後就出現
可是我看網址上有抓到參數,但是開中斷時,是沒有抓到的
把名稱改回來卻又可以,請問這可能是什麼問題呢?
您可以到您專案的App_Start底下的RouteConfig.cs修改相關訊息
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 將這邊的id修改為您想要的變數名稱
);
註: 如果您有設定專屬Controller的MapRoute,就不要修改Default的這個,不然所有沒被指定到Route的變數id都需要做調整~
當然也有比較簡單的解法,ex.
// 用QueryString
window.location = '@Url.Content("~/PDNurse/PDNurseRecord/PDNurseRecordEdit?新的變數名稱=")' + guid;
您好,我config沒有做任何變動
在其他地方使用類似寫法
$('.fn-editChang').on('click', function () {
var guid = $(this).attr('data-guid');
var TubeGuid = $(this).attr('data-tube');
window.location = '@Url.Content("~/PDNurse/InfusionTube/InfusionChangEdit/?TubeGuid=")' + TubeGuid + '&guid=' + guid;
});
卻沒有這問題,所以我才覺得很奇怪
能否順便請問,我想傳第二個參數,可是卻傳不上去
這裡PO的卻可以@@
如果您要使用Route的URL形式,就必須在RouteConfig.cs先設定好,以DefaultRoute來說
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
上面這要傳達的意思就是
URL: hostname/這是Controller/這是Action/這是變數id
因此,當您輸入hostname/aaa/bbb/ccc的時候,對Server來說,您就是要請他執行aaa Controller底下的bbb Action,然後帶入的參數id的值為ccc
因此,假如我今天改掉Action裡面的Parameter名稱,例如
public ActionResult bbb(string guid)
{
// ...
return View();
}
然後我又輸入hostname/aaa/bbb/ccc的時候,對Server來說,她就會不知道要給哪個Action去執行,因為沒有任何一個bbb Action有包含Parameter名稱為id的參數
當然如果今天是使用QueryString,例如輸入hostname/aaa/bbb?guid=ccc,直接告訴Server我的變數名稱叫做guid/值為ccc,那當然就不會出現問題囉~
window.location = '@Url.Content("~/PDNurse/InfusionTube/InfusionChangEdit/?TubeGuid=")' + TubeGuid + '&guid=' + guid;
您留言中的例子就是使用QueryString直接指定了Parameter名稱,所以Server知道要交給擁有TubeGuid跟guid兩個Parameter的Action執行,所以不會有問題~
window.location = '@Url.Content("~/PDNurse/PDNurseRecord/PDNurseRecordEdit/?guid=")' + guid + '&OpdEvalGuid=' + OpdEvalGuid;
謝謝,我後來用這樣後,參數成功帶入
不過我記得昨天也有常是這樣的做法,可是卻失敗@@
可能我JS有打錯吧,謝謝解答
public ActionResult PDNurseRecordEdit(string id, string OpdEvalGuid)
這是接收參數,
如果是Get,
代表你的參數有一個是id,
如: localhost/Home/Index?id=123
如果是Post,
代表你的表單有一個name是id.
你要傳指定參數名稱的話,AJAX會比較好,以下範例:
$.ajax({
url: "@Url.Action("AAA", "BBB")",
data: {
XXX_ID: $('#txtXXX_ID').val(),
TYPE: '1'
},
type: 'post',
cache: false,
dataType: 'json',
success: function (data) {
if (data.status != "ok") {
jAlert('warning', data.Message, '系統訊息');
$("#popup_ok").click(
function () {
});
}
else {
$("#txtXXX_NAME").val(data.List[0]);
}
}
});