DropDownListFor<>
내 LayoutTemple에서 를 사용하려고 하므로 모델에 액세스 할 수 없습니다. 그래서 내가 한 것은 내가 사용하려는 클래스와 함께 DBContext의 인스턴스를 호출하는 @{}
페이지 상단의 블록에 FFInfo.DAL.SoloClassesContext db = new FFInfo.DAL.SoloClassesContext();
있었습니다. 그런 다음 원하는 곳에 목록을 배치했습니다.
@Html.DropDownListFor(
m => m.ID,
new SelectList(db.CultureCodes, "ID", "DisplayName"));
하지만 코드를 실행하면 줄에 오류가 발생합니다 m => m.ID
. 주어진 오류는 다음과 같습니다.
식 트리에는 동적 작업이 포함될 수 없습니다.
이 유형의 드롭 다운을 사용한 적이 없으며 MVC를 처음 사용합니다. 누구든지 내가 뭘 잘못하고 어떻게 고칠 수 있는지 말해 줄 수 있습니까?
솔루션에 몇 가지 변경 사항을 제안합니다.
DropDownListFor()
그냥 사용 하는 대신DropDownList()
@ Html.DropDownList ( "CultureCode", new SelectList (db.CultureCodes, "ID", "DisplayName"))
뷰에서 데이터베이스 데이터에 액세스하는 대신 표준에서 벗어나 뷰 (일반적으로 HTML)를 데이터베이스와 결합합니다 ... 쿼리를 컨트롤러에 넣고 데이터를 ViewBag에 넣어야합니다. 수집.
따라서 레이아웃에서 위에서 제안한 코드 대신 다음을 사용해야합니다.
@Html.DropDownList("CultureCode", (SelectList)ViewBag.Codes, "Select one...")
컨트롤러에서 다음과 같이로드합니다.
ViewBag.Codes = new SelectList(db.CultureCodes, "ID", "DisplayName");
편집 : 당신은 부하, 액션 필터를 수행하거나 삽입 할 수 CultureCodes
의를 ViewBag
:
public class IncludeCultureCodesAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var controller = filterContext.Controller;
// IController is not necessarily a Controller
if (controller != null)
{
var db = new YourContext();
controller.ViewBag.Codes = new SelectList(db.CultureCodes, "ID", "DisplayName"));;
}
}
}
그런 다음 컨트롤러 작업에서 ...로 꾸밀 수 있습니다 [IncludeCultureCodes]
. 따라서 해당 속성이있는 작업은 코드 모음을로드합니다.
하지만 레이아웃 (예 : 홈 / 인덱스)을 한 번로드 한 다음 부분보기를 사용하는 것이 더 나은 방법이라고 생각합니다. 이렇게하면 집으로 돌아가거나 다른 전체보기 호출로만 레이아웃을 다시로드 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다