Связанный .lib-файл связан с .dll
У меня была такая же проблема. Скажем, у меня есть проекты MyProject и TestProject. Я эффективно связал файл lib для MyProject с TestProject. Однако этот файл lib был создан, так как была построена DLL для MyProject. Кроме того, я не содержал исходный код для всех методов в MyProject, но только доступ к точкам входа DLL.
Чтобы решить проблему, я построил MyProject как LIB и связал TestProject с этим .lib-файлом (скопируйте вложенный файл .lib в папку TestProject). Затем я смогу снова создать MyProject как DLL. Он компилируется, поскольку lib, с которым связан TestProject, содержит код для всех методов в классах MyProject.
Вы можете разделить свою бизнес-логику на viewmodel, поэтому ваше представление имеет более чистое разделение.
Сначала создайте модель просмотра, чтобы сохранить идентификатор, который пользователь выберет, и список элементов, которые будут отображаться в DropDown
.
ViewModel:
public class UserRoleViewModel
{
// Display Attribute will appear in the Html.LabelFor
[Display(Name = "User Role")]
public int SelectedUserRoleId { get; set; }
public IEnumerable<SelectListItem> UserRoles { get; set; }
}
Ссылки:
Внутри контроллера создайте метод, чтобы получить список UserRole
и преобразуйте его в форму, которая будет представлена в представлении.
Контроллер:
private IEnumerable<SelectListItem> GetRoles()
{
var dbUserRoles = new DbUserRoles();
var roles = dbUserRoles
.GetRoles()
.Select(x =>
new SelectListItem
{
Value = x.UserRoleId.ToString(),
Text = x.UserRole
});
return new SelectList(roles, "Value", "Text");
}
public ActionResult AddNewUser()
{
var model = new UserRoleViewModel
{
UserRoles = GetRoles()
};
return View(model);
}
Ссылки:
Теперь, когда создана модель представления, упрощается формализация представления
Вид:
@model UserRoleViewModel
@Html.LabelFor(m => m.SelectedUserRoleId)
@Html.DropDownListFor(m => m.SelectedUserRoleId, Model.UserRoles)
Ссылки:
Это приведет к:
<label for="SelectedUserRoleId">User Role</label>
<select id="SelectedUserRoleId" name="SelectedUserRoleId">
<option value="1">First Role</option>
<option value="2">Second Role</option>
<option value="3">Etc...</option>
</select>
Для вызова вашей функции DropDownListFor
требуется еще несколько параметров. Вам нужен SelectList, как в следующем вопросе SO:
MVC3 DropDownListFor - простой пример?
С тем, что у вас там, вы только сказали где хранить данные, а не где загружать список из.
@{
List<CategoryModel> CategoryList = CategoryModel.GetCategoryList(UserID);
IEnumerable<SelectListItem> CategorySelectList = CategoryList.Select(x => new SelectListItem() { Text = x.CategoryName.Trim(), Value = x.CategoryID.Trim() });
}
<tr>
<td>
<B>Assigned Category:</B>
</td>
<td>
@Html.DropDownList("CategoryList", CategorySelectList, "Select a Category (Optional)")
</td>
</tr>
Что-то близко к:
@Html.DropDownListFor(m => m.UserRole,
new SelectList(Model.Roles, "UserRoleId", "UserRole", Model.Roles.First().UserRoleId),
new { /* any html attributes here */ })
Для заполнения DropDownListFor вам нужен SelectList. Для любых HTML-атрибутов, которые вам нужны, вы можете добавить:
new { @class = "DropDown", @id = "dropdownUserRole" }
Один способ может быть:
<select name="listbox" id="listbox">
@foreach (var item in Model)
{
<option value="@item.UserRoleId">
@item.UserRole
</option>
}
</select>
Вместо List<UserRole>
вы можете позволить вашей модели содержать SelectList<UserRole>
. Также добавьте свойство SelectedUserRoleId
для хранения ... ну ... выбранного значения идентификатора UserRole.
Заполните SelectList, а затем в вашем представлении используйте:
@Html.DropDownListFor(x => x.SelectedUserRoleId, x.UserRole)
и вы должны быть в порядке.
См. также http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist (v = vs.108) .aspx .
@Html.DropDownList("ddl",Model.Select(item => new SelectListItem
{
Value = item.RecordID.ToString(),
Text = item.Name.ToString(),
Selected = "select" == item.RecordID.ToString()
}))