iT邦幫忙

0

C# MVC 如何用URL返回View

  • 分享至 

  • xImage

一般return view,會使用下列寫法

public IActionResult Index()
{
    return View();
}

我想問說,能不能改成,當我點選
假設:CreateForm按鈕時,
到資料庫獲取 Url:"Project/CreateForm",
然後依照該網址直接return 到Views底下的Project資料夾中的CreateForm.cshtml?
我目前寫法是可以返回網址
https://localhost:7088/Project/FormCreate
但是進入網址會返回找不到該網頁。
會強迫寫IActionResult FormCreate才可以顯示

		public IActionResult FormCreate(string formId)
		{
          	return View();
		}

JS:

        $("#itemList").on("click", ".createForm", function () {
            var itemValue = "製作表單";
            $.ajax({
                url: '/Project/GetViewUrl',
                type: 'POST',
                data: { itemValue: itemValue },
                success: function (response) {
                    // 獲取返回的URL
                    var url = response.url;
                    // 重定向到該URL
                    window.location.href = url;
                },
                error: function () {
                    alert('無法獲取URL');
                }
            });

Controller:
會獲取到"/Project/FormCreate"

		[HttpPost]
        public IActionResult GetViewUrl(string itemValue)
        {
            DbManager dbManager = new DbManager();
            string url = dbManager.GetUrlFromDatabase(itemValue);
            return Json(new { url = url }); // 返回JSON格式
        }
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
厚厚
iT邦新手 1 級 ‧ 2024-02-26 16:16:44
最佳解答
厚厚 iT邦新手 1 級 ‧ 2024-02-26 16:19:36 檢舉

你的目的就是使用DB內的資料到資料關聯的VIEW
所以在重點我放在Controller內,取完DB資料後,在指定到VIEW

1
緯大啊緯大人
iT邦研究生 1 級 ‧ 2024-02-26 16:53:43

我有點霧煞煞,看不出你的問題點在哪兒

你的

return 到Views底下的Project資料夾中的CreateForm.cshtml?

但返回網址卻是寫

https://localhost:7088/Project/FormCreate

所以你實際ProjectController裡面到底有FormCreate還是CreateForm?
View裡面又有哪些?

撇開上面問題

你在MVC下

要取得AAA/BBB.cshtml

即便你的View/AAA/BBB.cshtml是存在的
你在AAAController裡面 也必須要有

public IActionResult BBB()
{
    return View();
}
rain_yu iT邦新手 1 級 ‧ 2024-02-26 17:02:17 檢舉

我的最終目標是希望,用一個controller到DB中獲取到view的位置。
根據該位置直接return view。
不想要每新增一個cshtml,就寫一個action去return view

rain_yu iT邦新手 1 級 ‧ 2024-02-26 17:09:10 檢舉

但是現在寫法會變成,我可以獲取到網址,
但是我還是得寫一個

public IActionResult FormCreate(string formId)
		{
          	return View();
		}

沒有寫的話,網址會返回找不到頁面。

所以你有看到我最後寫什麼嗎?

MVC架構在大部分狀態下,View就是對應一個Controller裡面的Action,大致上只有PartialView或Component之類的才不需要增加Action對應。

至少我沒有運用過任何...不需要Action的View...除了上述特例以外..

1
not
iT邦新手 4 級 ‧ 2024-02-27 04:49:43

去改 route,在 default route 前面多增加這一段,這個目的是把所有controller名字叫 project,底下的 actione 都攔截起來丟到 FormCreate 這個 Action

routes.MapRoute(
"ProjectRoute", // Route name
"Project/{action}/{id}", // URL with parameters
new { controller = "Project", action = "FormCreate", id = "" } // Parameter defaults
);

攔截進來之後,再用 var route = Request.Path.Value 之類的方式,取得使用者輸入的網址

另外友善提醒,不要相信任何從client端輸入的東西,包括網址列和request參數名稱 或值,這些東西沒過濾直接送往 db 的話會很精彩

其他 route 的參考資料

https://ithelp.ithome.com.tw/articles/10203560

https://learn.microsoft.com/zh-tw/aspnet/mvc/overview/older-versions-1/controllers-and-routing/asp-net-mvc-routing-overview-cs

https://blog.miniasp.com/post/2011/08/01/ASPNET-MVC-Developer-Note-Part-21-Routing-Concepts-and-Skills

我要發表回答

立即登入回答