WebMatrix 3.0 및 SQL CE를 사용하여 .cshtml 웹 폼을 만듭니다.SQL CE 쿼리에 따라 동적 확인란 목록 값을 선택하십시오.
문제점 : 테이블의 모든 레코드를 쿼리하여 동적으로 생성 된 확인란 목록이 있습니다. 값 ID가있는 각 확인란에 대해 값 ID가 다른 테이블의 행에 해당하는 경우에만 checked = "checked"로 설정하려고합니다.
자세한 내용 : 두 개의 기본 데이터 테이블 ("person"및 "socialMedia")과 세 번째 테이블 ("persMedia")이 포함 된 데이터베이스가 있습니다. "persMedia"테이블은 "person"과 "socialMedia"간의 다 대다 관계를 관리하기 위해 존재합니다. 테이블 "person"에는 ID라는 기본 키가 있습니다. 테이블 "socialMedia"에는 ID라는 기본 키가 있습니다. 표 "persMedia"에는 personID 및 siteID라는 두 개의 열이 있습니다. 사람이 ID = 1 인 "사람"테이블에 나열된다고 가정 해보십시오. 사람이 4와 7의 ID 값을 가진 "socialMedia"테이블에 나열된 2 개의 소셜 미디어 계정을 가지고 있다고 가정 해보십시오.이 경우 personID와 siteID 값이 1,4와 1 인 두 개의 행이 "persMedia"테이블에 있습니다. 7.
URL에서 id 값을 요청하는 양식을 만듭니다. 그런 다음 id 값과 동일한 기본 키가있는 행에 대한 "사람"테이블을 쿼리합니다. 그런 다음 확인란 목록을 만듭니다. "socialMedia"테이블의 각 레코드에 대해 하나의 체크 박스가 있습니다. 따라서 각 확인란의 이름은 "socialM"이고 값은 "@ social.ID"입니다. 여태까지는 그런대로 잘됐다.
여기에 문제가 있습니다. 각 확인란에 대해 personID 레코드가 id이고 siteID 값이 @ social.ID 인 행이 "persMedia"테이블에있는 경우 checked 특성을 "checked"로 설정하고 싶습니다. 어떻게해야합니까? 아래 코드의 여러 변형을 시도했습니다.
var id=Request["id"];
var SQLSELECT = "SELECT * FROM person WHERE @0=ID";
var db = Database.Open("mydatabase");
var person = db.QuerySingle(SQLSELECT,id);
var getSocMedia = db.Query("SELECT ID, site FROM socialMedia");
var getPersMedia = db.Query("SELECT personID FROM persMedia");
아래의 내용은 기본적으로 체크 박스가없는 체크 박스 목록을 만듭니다. 내가 다 대다 관계 테이블의 쿼리를 기반으로 상자의 일부를 확인하기위한 시도로, 위의 라인을 수정
는<p>Accounts:</p>
@foreach(var socialM in getSocMedia){
<input type="checkbox" name="social" value="@socialM.ID" />@socialM.site<br />
}
, 여기에 내가 생각 해낸 것입니다.
<p>Accounts:</p>
@foreach(var socialM in getSocMedia){
<input type="checkbox" name="social" value="@socialM.ID" [email protected](var persmed in getPersMedia){if(persmed.personID != null){"checked";}}>@socialM.site<br />
}
오류는 "할당, 호출, 증가, 감소, 대기 및 새 개체 표현식 만 명령문으로 사용할 수 있습니다."라는 오류가 표시됩니다. 몇 가지 대안을 시도하고 몇 가지 다른 오류가 발생했습니다. 결론 : 동적으로 생성 된 체크 박스 목록에서 체크 된 값을 어떻게 설정합니까?
가까운 것으로 보입니다. 데이터베이스의 값에 관계없이 모든 상자가 선택됩니다. 나는 'mycheckedvariable = null'로 'mycheckedvariable! = null'을 변경하면서 코드를 수정 해 보았습니다. 내가 그랬을 때, 나는이 오류가 발생했다 : 'WebMatrix.Data.DynamicRecord'에는 'personID'에 대한 정의가 없다.정의가 포함되어 있지 않으면 "! ="을 "="으로 변경하기 전에 null이 아닌지 여부를 판별하는 방법을 이해할 수 없습니다. – TJM
좋아, 바보 같은 실수 야. "="대신 "=="을 사용하는 것을 잊었습니다. 그러나 모든 상자는 테이블의 데이터에 관계없이 두 경우 모두 검사됩니다. 이유를 모르겠다. – TJM
그것을 알아 냈어! 모든 상자는 데이터베이스의 데이터에 관계없이 검사되었습니다. 페이지 소스를 검사했을 때 체크하지 말아야 할 체크 박스의 HTML은 다음과 같습니다 : . checked = @ mycheckedvariable을 checked = "(@ mycheckvariable.Length! = 0)"로 바꿈으로써이 문제를 해결했습니다. – TJM