iT邦幫忙

0

[Core MVC]如何在index頁面呈顯controller[HttpPost]的錯誤訊息

  • 分享至 

  • xImage

各位大大好
小弟是剛自學寫程式一個多月的超級菜雞
想建立一個Entity FrameworkCore MVC專案來練習看看

目前遇到一個問題
我在index寫了一個在table呈顯所有資料(引用@model IEnumerable)
只要在資料行旁邊點選編輯
可以直接在原本的呈顯資料的table row直接編輯資料
(網頁沒有刷新,我用jquery把原本資料隱藏,並把隱藏的input textfield顯示出來)

點選送出後,用ajax來呼叫controller的[HttpPost]Edit
在console我看過資料是有正確包成json傳遞的

但是有一個問題,由於我沒有建立view Edit(所以才用ajax來呼叫)
請求是在index頁面發出的
導致說如果傳送的資料不合格(有重複或已存在)
我原本寫在後段[HttpPost]Edit的message,沒辦法返回到index呈現
exception會告訴我The view 'Edit' was not found

請問各位大大
有什麼辦法可以把錯誤訊息丟回到index頁面做呈現呢?
再麻煩各位前輩解惑了 感恩

froce iT邦大師 1 級 ‧ 2024-01-26 08:51:06 檢舉
先聲明,我沒在用.net,這是一般作法,.net core如果有特別的作法由其他人補充。

ajax或xhr這種原意都是用來局部更新頁面,對response作更細緻的控制用的。
所以你收到錯誤後你要自己用js去更新頁面。
以你的問題就是ajax收到後,用window.location去跳轉到相對應的錯誤網頁。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
緯大啊緯大人
iT邦研究生 1 級 ‧ 2024-01-26 09:04:19

你既然前端使用ajax,目的就是無畫面重置感卻有刷新內容,你可以在你的後端,選擇回傳JsonResult或者string,如下:

[HttpPost]
public string Edit(InputClass input)
{
    //dosomething

    //判斷是否有參數沒有符合
    if (!ModelState.IsValid)
    {
        return "Error";
    }
}

過後在經由你的前端接收字串,遇到錯誤訊息,反饋出來,看你要使用一般的alert或者sweetalert等套件。

當然,若您編輯成功了,想要將畫面的內容轉換為編輯成功的樣子,那麼回傳就不可以只是字串了,會是一包Json,可能包含了是否編輯成功,以及編輯後內容,以便於在成功時利用資料刷新你的頁面。

0
Samuel
iT邦好手 1 級 ‧ 2024-01-29 20:02:59

可以嘗試透過ViewData
若你有跨不同action則選擇tempdata
在.net core mvc跟.net framework mvc語法一樣

https://coolmandiary.blogspot.com/2020/11/aspnet-mvcviewdataviewbagsessiontempdata.html

https://ithelp.ithome.com.tw/upload/images/20240129/20107452zSqT9tzvkL.png

https://ithelp.ithome.com.tw/upload/images/20240129/201074529zLA4GGa27.png

我要發表回答

立即登入回答