iT邦幫忙

0

ASP.NET MVC 問題 DropDownList Error

試了2天實在搞不定,上來跟前輩們求救一下~
一個DropDownList,一個按鈕,按更新POST回去Controller更新資料,但不懂為什麼DropDownList那邊會發生錯誤???
原始碼如下,錯誤報錯在View裡,不是在Controller裡
Controller

public ActionResult EditFinalPaper(int cId, int pId)
{
    List<SelectListItem> PresentationListItem = new List<SelectListItem>();
    PresentationListItem.Add(new SelectListItem { Text = "口頭發表(Oral)", Value = "1" });
    PresentationListItem.Add(new SelectListItem { Text = "海報展示發表(Poster)", Value = "2" });
    PresentationListItem.Add(new SelectListItem { Text = "口頭和海報發表皆可(Oral or Poster)", Value = "3" });
    ViewBag.PresentationList = PresentationListItem;

    Paper p = paperSrv.GetPaperInfo(pId);
    return View(p);
}

[HttpPost]
public ActionResult EditFinalPaper(Paper paper)
{
    if (ModelState.IsValid)
    {
        try
        {
            int PaperId = paperSrv.EditFinalPaper(paper);
            return RedirectToAction("UploadFinalPaperFileP", "Paper", new { cId = paper.ConferenceId, pId = PaperId });
        }
        catch (Exception e)
        {
            throw;
        }
    }
    return View(paper);
}

public int EditFinalPaper(Paper paper)
{
    paper.LastUpdate = DateTime.Now;
    db.SaveChanges();
    return paper.PaperId;
}

View

@using (Html.BeginForm())
{
    <div class="form-horizontal">
        @Html.HiddenFor(model => model.ConferenceId)
        @Html.HiddenFor(model => model.PaperId)
        <div class="form-group">
            <label for="Presentation" class="control-label col-md-2">論文發表方式(Presentation)</label>
            <div class="col-md-9">
                @Html.DropDownList("Presentation", (IEnumerable<SelectListItem>)ViewBag.PresentationList, "===請選擇===", new { @class = "form-control" })
            </div>
        </div>
        
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="更新" class="btn btn-success" id="Update" onclick="if(confirm('確認更新?')) { return true; } else { return false; };" />
            </div>
        </div>
    </div>
}

錯誤訊息

遇到這種Error真的不知道該怎麼解呀~在View裡中斷查錯也沒有得到有用的資訊!
找google大神的常見問題我也都避開了,還是一樣會Error~
我想很大問題是出在ViewBag.PresentationList這個東西出錯,但就不知道錯在那裡?要如何修正
其它頁面也都是用ViewBag來傳值沒問題
目前沒有方向了,上來求救一下~

看更多先前的討論...收起先前的討論...
中斷點下在17行,印一下第一次進入的ViewBag.PresentationList 跟送出後的ViewBag.PresentationList 看是不是一樣的
優悠 iT邦新手 3 級 ‧ 2020-07-30 09:18:25 檢舉
用JAJX回後台抓資料,回傳JSON給前台,前台用JS(或JQ)組DropDownList
leo226 iT邦新手 4 級 ‧ 2020-07-30 13:43:51 檢舉
OK
leo226 iT邦新手 4 級 ‧ 2020-07-30 13:47:38 檢舉
感謝
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
glj8989332
iT邦研究生 4 級 ‧ 2020-07-29 16:46:01
最佳解答

在你的 http-post EditFinalPaper, PresentationListItem 不會再回來, 要再重新賦值.
所以改法應該會這樣

[HttpPost]
public ActionResult EditFinalPaper(Paper paper)
{

   if (ModelState.IsValid)
    {
        try
        {
            int PaperId = paperSrv.EditFinalPaper(paper);
            return RedirectToAction("UploadFinalPaperFileP", "Paper", new { cId = paper.ConferenceId, pId = PaperId });
        }
        catch (Exception e)
        {
            throw;
        }
    }
    
   List<SelectListItem> PresentationListItem = new List<SelectListItem>();
    PresentationListItem.Add(new SelectListItem { Text = "口頭發表(Oral)", Value = "1" });
    PresentationListItem.Add(new SelectListItem { Text = "海報展示發表(Poster)", Value = "2" });
    PresentationListItem.Add(new SelectListItem { Text = "口頭和海報發表皆可(Oral or Poster)", Value = "3" });
    ViewBag.PresentationList = PresentationListItem;
    
    return View(paper);
}
leo226 iT邦新手 4 級 ‧ 2020-07-30 13:41:26 檢舉

嗯,是這個問題沒錯,問題己解,謝謝~
我己經改為RedirectToAction讓它不會再回來同一頁,但錯誤訊息依舊。

return RedirectToAction("UploadFinalPaperFileP", "Paper", new { cId = paper.ConferenceId, pId = PaperId });

if (ModelState.IsValid)這個東西卡住讓我誤判執行流程,所以卡住,己有修正,謝謝

glj8989332 iT邦研究生 4 級 ‧ 2020-07-30 22:40:09 檢舉

/images/emoticon/emoticon08.gif

0
w4560000
iT邦研究生 5 級 ‧ 2020-07-29 16:53:51

是不是你更新後
沒有給他ViewBag.PresentationList
又重新Render一次就報錯

leo226 iT邦新手 4 級 ‧ 2020-07-30 13:44:46 檢舉

嗯,是這個問題沒錯,問題己解,謝謝~
if (ModelState.IsValid)這個東西卡住讓我誤判執行流程,所以卡住,己有修正,謝謝

w4560000 iT邦研究生 5 級 ‧ 2020-07-30 17:37:17 檢舉

/images/emoticon/emoticon12.gif

我要發表回答

立即登入回答