Webmatrix (かみそりの構文) を使用して ASP.Net Web ページのプログラミングを学習しています。
目標は、ドロップダウン リスト ボックスに、テーブルに格納された値と、結合された別のテーブルから取得された選択された値を入力することです。
選択した値は、投稿の前後に表示する必要があります。
また、UserProfiles テーブルに UserTypeId がない場合 (UserTypeId == NULL)、デフォルトの「選択してください」が表示されるようにしたいと考えています。
表 1: UserTypeId および Name フィールドを持つ UserTypes 表 2: 外部キーとして UsertypeId を持つ UserProfiles
次のエラー メッセージが表示され、その問題を解決する方法が見つかりません。
コードセクション:
var db = Database.Open("MyDatabase");
接続ユーザーの UserProfiles テーブルに格納されている UserTypeId を取得するには
var selectedUserTypeId = db.QuerySingle("SELECT UserTypeId FROM UserProfiles INNER JOIN Users ON UserName=@0",authenticatedUser);
UserTypes のリストを取得するには
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
});
最後の行で問題が発生します: 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 Users.UserName=@0";
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 UserTypeId=@0
WHERE UserId=@1";
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>
}