iT邦幫忙

0

識別錯誤

 $('.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 這個參數明改一下名字
執行後就出現
https://ithelp.ithome.com.tw/upload/images/20190827/20110132Kmp0sbOiWQ.jpg

可是我看網址上有抓到參數,但是開中斷時,是沒有抓到的
把名稱改回來卻又可以,請問這可能是什麼問題呢?

fillano iT邦超人 1 級 ‧ 2019-08-27 17:55:01 檢舉
id是router設定好的參數,要改名字的話,你得改用query stirng的方式傳送。
0
YoChen
iT邦新手 3 級 ‧ 2019-08-27 18:28:20
最佳解答

您可以到您專案的App_Start底下的RouteConfig.cs修改相關訊息

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 將這邊的id修改為您想要的變數名稱
);

註: 如果您有設定專屬ControllerMapRoute,就不要修改Default的這個,不然所有沒被指定到Route的變數id都需要做調整~

當然也有比較簡單的解法,ex

window.location = '@Url.Content("~/PDNurse/PDNurseRecord/PDNurseRecordEdit?新的變數名稱=")' + guid; // 用QueryString
看更多先前的回應...收起先前的回應...
tenno081 iT邦新手 4 級 ‧ 2019-08-28 09:24:39 檢舉

您好,我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;
            });

https://ithelp.ithome.com.tw/upload/images/20190828/20110132hW5fhbWIt1.jpg
卻沒有這問題,所以我才覺得很奇怪

能否順便請問,我想傳第二個參數,可是卻傳不上去

這裡PO的卻可以@@

YoChen iT邦新手 3 級 ‧ 2019-08-28 10:06:40 檢舉

如果您要使用RouteURL形式,就必須在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,那當然就不會出現問題囉~

YoChen iT邦新手 3 級 ‧ 2019-08-28 10:12:15 檢舉
window.location = '@Url.Content("~/PDNurse/InfusionTube/InfusionChangEdit/?TubeGuid=")' + TubeGuid + '&guid=' + guid;

您留言中的例子就是使用QueryString直接指定了Parameter名稱,所以Server知道要交給擁有TubeGuid跟guid兩個Parameter的Action執行,所以不會有問題~

tenno081 iT邦新手 4 級 ‧ 2019-08-28 10:20:03 檢舉
  window.location = '@Url.Content("~/PDNurse/PDNurseRecord/PDNurseRecordEdit/?guid=")' + guid + '&OpdEvalGuid=' + OpdEvalGuid;

謝謝,我後來用這樣後,參數成功帶入

不過我記得昨天也有常是這樣的做法,可是卻失敗@@

可能我JS有打錯吧,謝謝解答

0
小魚
iT邦大師 1 級 ‧ 2019-08-27 20:25:48
public ActionResult PDNurseRecordEdit(string id, string OpdEvalGuid)

這是接收參數,
如果是Get,
代表你的參數有一個是id,
如: localhost/Home/Index?id=123
如果是Post,
代表你的表單有一個name是id.

0
優悠
iT邦新手 4 級 ‧ 2019-08-28 09:11:02

你要傳指定參數名稱的話,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]);

                    }
                }
            });

我要發表回答

立即登入回答