저는 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>
}
솔루션에 감사드립니다. 그러나 추가 문제가 있습니다. selectedUserTypeId는 (정상적인) NULL 일 수 있습니다. 이 경우 다음 오류가 발생합니다. "연산자 '=='은 'int'및 'System.DBNull'형식의 피연산자에 적용 할 수 없습니다. 이것을 처리하는 가장 좋은 방법은 무엇입니까? 이상적으로, 값이 null 인 경우, 드롭 다운에 기본 "Please select"를 표시하고 싶습니다. – user1455103
selectUserTypeId가 null 인 경우,'selectUserTypeId = selectUserTypeId == null '과 같은 UserTypeId (0 또는 음수 값)에 존재할 수없는 int 값을 할당합니다. 0 : selectUserTypeId;'. 그러면 기본 선택 항목이 표시됩니다. – GmG