Привет! Я пытаюсь заставить DropDownList работать в моем простом приложении. Я новичок Я уже провел несколько дней, просматривая различные инструкции в книгах и в Интернете, поэтому, если вы направите меня к одному, я уже был там. Моя ситуация действительно простая и тривиальная, но я не могу заставить ее работать. Я считаю, что лучший способ помочь мне - взглянуть на мой код.
Я загрузил свои проекты в SkyDrive, и я полагаю, что вам будет очень легко запускать мои проекты. Пока что список SelectList отображается в начальном представлении AddItem.
Вот проекты:
http://cid -5c0bc0a6f7bdc3c6.office.live.com / self.aspx / DebugB / DropDownTwo.zip
Папка содержит 2 проекта:
Для запуска проектов:
- Запустите SHAWebService.
- Запустите SHAWebRole, он использует SHAWebService через порт 8080.
- Перейдите на вкладку «AddItem», и вы увидите мой рендер SelectList в представлении AddItem.
Тогда у меня вопрос, как заставить его работать оттуда через представления Edit и Details?
Если вы предпочитаете посмотреть мой код здесь, я вставлю часть его ниже:
SalesItemController выглядит следующим образом:
public ActionResult AddItem()
{
using (var WS = new SHAServiceReference.SHAServiceClient())
{
var categories = WS.GetCategories().ToList();
IEnumerable<SelectListItem> lstCategory = categories.Select(cat => new SelectListItem
{
Value = Convert.ToString(cat.CategoryID),
Text = cat.CategoryName
});
var salesItemModel = new SalesItemModel();
// Retrieving the UserID of the user which is going to add a sales item.
salesItemModel.SellerUserID = 24; // Hardcoded only for this example //(int)Session["userId"];
salesItemModel.CategorySelectList = lstCategory;
return View(salesItemModel);
}
}
[HttpPost]
public ActionResult AddItem(SalesItemModel salesItemModel, HttpPostedFileBase file)
{
if (ModelState.IsValid)
{
// This variable will capture the SalesItemID of the newly created SalesItem.
var salesItemId = 0;
//Attempt to add the SalesItem
using (var WS = new SHAServiceReference.SHAServiceClient())
{
salesItemId = WS.AddSalesItem
(
salesItemModel.SellerUserID,
salesItemModel.CategoryID,
salesItemModel.Title,
salesItemModel.Description,
salesItemModel.Price,
false
);
return View(salesItemModel);
}
}
return View(salesItemModel);
}
Вид AddItem выглядит следующим образом:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<SHAWebRole.Models.SalesItemModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Add Item
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>
Add Item To Sell</h2>
<% using (Html.BeginForm("AddItem", "SalesItem", FormMethod.Post, new { enctype = "multipart/form-data" }))
{%>
<%: Html.ValidationSummary(true)%>
<fieldset>
<legend>Fill in info about what you are selling</legend>
<div id="userDiv">
<%: Html.HiddenFor(model => model.SalesItemID)%>
<%: Html.HiddenFor(model => model.SellerUserID)%>
Sales Item Category
<div>
<%: Html.DropDownListFor(m => m.CategoryID, Model.CategorySelectList, "Select Category") %>
</div>
Когда я получаю CategoryID и CategoryName в SalesItemController из веб-службы с помощью этого метода, var category = WS.GetCategories (). ToList ();
Я вызываю этот метод в веб-сервисе:
/* Returns a list with the Categories for SalesItems */
public List<CategoryDto> GetCategoriesBL()
{
var categories = (from eachCategory in context.Categories
select new CategoryDto
{
CategoryID = eachCategory.CategoryID,
CategoryName = eachCategory.CategoryName
}
).ToList();
return categories;
}
Объект передачи данных, который я использую в вышеуказанном методе (CategoryDto), выглядит следующим образом:
[DataContract]
public class CategoryDto
{
[DataMember]
public int CategoryID { get; set; }
[DataMember]
public string CategoryName { get; set; }
}
Окончательно SalesItemModel выглядит так:
public class SalesItemModel
{
public int SalesItemID { get; set; }
public int SellerUserID { get; set; }
public int CategoryID { get; set; }
public IEnumerable<SelectListItem> CategorySelectList { get; set; }
В настоящее время DropDownList прекрасно отображается в начальном представлении AddItem, но когда я нажимаю кнопку «Добавить элемент», выдается следующее исключение:
«Элемент ViewData, имеющий ключ« CategoryID », имеет тип« System.Int32 », но должен иметь тип« IEnumerable »."
Я не знаю, что делать, чтобы это работало. Вы можете мне помочь?
Мне нужен кто-то, чтобы помочь мне исправить некоторые детали, чтобы заставить это работать.