0

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>        
}
4

1 に答える 1

2

このエラー メッセージで強調表示されている問題を解決する必要があります。

var selectedUserTypeId = db.QuerySingle(...)

var selectedUserTypeId = db.QueryValue(...)

またはレコード フィールドを指定します。

Selected = userTypeDataListItem.UserTypeId == selectedUserTypeId.UserTypeId ? true : false
于 2012-09-17T06:46:36.433 に答える