2012-09-16 2 views
0

저는 Webmatrix (면도기 구문 포함)를 사용하여 ASP.Net 웹 페이지 프로그래밍을 배우고 있습니다.면도기 웹 페이지 (WebMatrix 사용)의 조인 된 테이블에서 드롭 다운 목록 값을 선택하십시오.

목표는 테이블에 저장된 값으로 채워진 드롭 다운 목록 상자와 선택한 값이 다른 조인 된 테이블에서 오는 것입니다.

선택한 값은 게시물 앞뒤에 표시되어야합니다.

UserProfiles 테이블 (UserTypeId == NULL)에 UserTypeId가 없으면 기본 "Please select"가 표시되기를 바랍니다.

표 1 : UserTypeId와 이름 필드 UserTypes 표 2 : 같은 UsertypeId와 UserProfiles 외래 키

나는 다음과 같은 오류 메시지가 그 문제를 해결하는 방법을 찾을 수 없습니다 : 연산자 '=='를 할 수 없습니다 유형 'INT'와 'WebMatrix.Data.DynamicRecord'의 피연산자에 적용 할

코드 섹션

:

var db = Database.Open("MyDatabase"); 

가 UserTypeId가 U에 저장하려면 연결된 사용자

var selectedUserTypeId = db.QuerySingle("SELECT UserTypeId FROM UserProfiles INNER JOIN Users ON [email protected]",authenticatedUser); 

에 대한 serProfiles 테이블은 문제가 발생하는 위치

var sqlUserTypeData = "SELECT userTypeId, Name FROM UserTypes"; 
var userTypeData = db.Query(sqlUserTypeData); 

var userTypeDataList = userTypeData.Select(userTypeDataListItem => new SelectListItem { 
    Value = userTypeDataListItem.UserTypeId.ToString(), 
    Text = userTypeDataListItem.Name, 
    Selected = userTypeDataListItem.UserTypeId == selectedUserTypeId ? true : false 
}); 

마지막 라인 인 UserTypes의 목록을 얻으려면 : userTypeDataListItem.UserTypeId == selectedUserTypeId합니다. 이러한 유형은 분명히 비교 될 수 없습니다.

if(!IsPost){ 
    var sqlUserData = @"SELECT *, UserTypes.Name AS UserType 
         FROM UserProfiles 
         INNER JOIN Users ON Users.UserId = UserProfiles.UserId 
         INNER JOIN UserTypes ON UserTypes.UserTypeId = UserProfiles.UserTypeId 
         WHERE [email protected]"; 

    var userData = db.QuerySingle(sqlUserData,authenticatedUser); 

    userType = userData.UserType; 
    } 

if(IsPost){ 
    Validation.RequireField("userTypeCombo", "Please select"); 

    userId = Request.Form["userId"]; 
    userTypeId = Request.Form["userTypeCombo"]; 

if(Validation.IsValid()) { 
     var updateCommand = @"UPDATE UserProfiles 
          SET [email protected] 
          WHERE [email protected]"; 
     db.Execute(updateCommand, userTypeId, userId); 
     Response.Redirect("~/authcontent/user"); 
    } 

HTML 섹션 :

@if (isAuthenticated) { 
    <form action="" method="post"> 
     @Html.ValidationSummary() 
     <section class="infoblock"> 
      <fieldset> 
       <legend>Mon profil</legend> 
       <ul> 
        <li><label for="userType">Profil</label> 
         @Html.DropDownList("userTypeCombo", "Please select", userTypeDataList)</li> 
       </ul> 
      </fieldset> 
     </section> 
    </form>   
} 

답변

2

당신과

var selectedUserTypeId = db.QuerySingle(...) 

대체이 오류 메시지에 의해 강조 문제를 해결해야

var selectedUserTypeId = db.QueryValue(...) 

또는 레코드 필드 지정 :

+0

솔루션에 감사드립니다. 그러나 추가 문제가 있습니다. selectedUserTypeId는 (정상적인) NULL 일 수 있습니다. 이 경우 다음 오류가 발생합니다. "연산자 '=='은 'int'및 'System.DBNull'형식의 피연산자에 적용 할 수 없습니다. 이것을 처리하는 가장 좋은 방법은 무엇입니까? 이상적으로, 값이 null 인 경우, 드롭 다운에 기본 "Please select"를 표시하고 싶습니다. – user1455103

+0

selectUserTypeId가 null 인 경우,'selectUserTypeId = selectUserTypeId == null '과 같은 UserTypeId (0 또는 음수 값)에 존재할 수없는 int 값을 할당합니다. 0 : selectUserTypeId;'. 그러면 기본 선택 항목이 표시됩니다. – GmG