다른 테이블의 값을 사용하여 선택한 옵션에 모델을 연결하는 ASP.NET MVC에서 DropDownListFor를 사용하려고했습니다. 전체 공개, 나는 내가하고있는 일을 거의 생각하지 않고 예제를 사용하고있다.DropdownListFor가 제대로 작동하지 않습니다.
@Html.DropDownListFor(model => model.GenreId, (SelectList)ViewBag.GenreSelect, new { @class = "form-control" })
GenreId 모델의 테이블에있는 열입니다 : 다음과 같이 DropDownList로 만들기
. (ID와 이름이 장르 테이블의 열입니다)
private void SetGenreViewBag(int? GenreId= null)
{
if (GenreId== null)
ViewBag.GenreSelect= new SelectList(db.Genres, "Id", "name");
else
ViewBag.GenreSelect = new SelectList(db.Genres, "Id", "name", GenreId);
}
모델가 열이 있습니다
An exception of type 'System.InvalidOperationException' occurred in System.Web.Mvc.dll but was not handled in user code
Additional information: There is no ViewData item of type 'IEnumerable' that has the key 'GenreId'
ViewBag가보기로 이동하기 전에 다음과 같이 설정합니다
나는 오류를 얻을 장르의 이드.
필자의 주요 문제는 DropDownListFor 함수의 구문을 이해할 수 없다는 것입니다. 게다가 해독하기 힘들 정도로 12 가지의 오버로드가 있습니다. 람다에 대한 첫 번째 매개 변수의 목적은 무엇입니까? 선택 목록 값에서 지정하는 값을 취하는 것 같지만 모델에 연결하는 방법을 얻지 못합니다. 온라인에서 명확한 답변을 찾지 못했습니다.
나는이 일을했다고 생각했지만, 내가 그 일을 멈추게 만들었다. 또한 DropDownList()를 사용하여 그 전에 작업 했었지만 DropDownListFor가 조금 더 나아졌으며 DropDownList()에서 제대로 작동하는 HTML 특성을 얻을 수 없다는 것을 알았습니다.
감사합니다.
편집 : 내부 컨트롤러 :
public ActionResult Create()
{
SetGenreViewBag();
return View();
}
참고 : 드롭 다운 목록의 모든 권리 항목 (즉, 장르)를 표시하지만 양식을 저장할 때 충돌이 발생합니다.
// POST: Home/Create
[HttpPost]
public ActionResult Create(Song songToCreate)
{
try
{
db.Songs.Add(songToCreate);
db.SaveChanges();
return RedirectToAction("Index");
}
catch
{
return View();
}
}
노래 모델 :이 구문이있을 때
namespace MyModule.Models
{
using System;
using System.Collections.Generic;
public partial class Song
{
public int Id { get; set; }
public string name { get; set; }
public int genreId { get; set; }
}
}
내부 오류를 찾기 위해
catch
블록에(Exception ex)
을 추가? –컨트롤러의 Create() 메서드 내부. 이것을 포함하도록 질문을 업데이트했습니다. – shim
[HttpPost] 속성을 가진'Create' 메소드의 코드를 추가하십시오. – ekad