모델없이 DropDownListFor를 사용하려고하면 "트리에 동적 작업이 없을 수 있습니다."오류가 발생합니다.

user1365911

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를 처음 사용합니다. 누구든지 내가 뭘 잘못하고 어떻게 고칠 수 있는지 말해 줄 수 있습니까?

Romias

솔루션에 몇 가지 변경 사항을 제안합니다.

  1. DropDownListFor()그냥 사용 하는 대신DropDownList()

    @ Html.DropDownList ( "CultureCode", new SelectList (db.CultureCodes, "ID", "DisplayName"))

  2. 뷰에서 데이터베이스 데이터에 액세스하는 대신 표준에서 벗어나 뷰 (일반적으로 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관