我正在学习使用 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>
}