0

我正在学习使用 Webmatrix(带有剃刀语法)的 ASP.Net 网页编程。

目标是让下拉列表框由存储在表中的值和来自另一个连接表的选定值填充。

所选值应在帖子之前和之后显示。

我还希望如果 UserProfiles 表中没有 UserTypeId (UserTypeId == NULL),则会显示默认的“请选择”。

表 1:具有 UserTypeId 和 Name 字段的 UserType 表 2:具有 UsertypeId 作为外键的 UserProfiles

我收到以下错误消息,但找不到解决该问题的方法: Operator '==' cannot be applied to operands of type 'int' and 'WebMatrix.Data.DynamicRecord'

代码部分:

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 回答