Ошибка LINQ to Entities при попытке привязать выпадающий список - PullRequest
0 голосов
/ 11 февраля 2011

Я пытаюсь создать модель представления и добавить SelectListItem, чтобы позволить мне связать выпадающий список. У меня есть очень простая модель представления, которая выглядит следующим образом

  public class CreatePurchaseViewModel
{
    public Product Product { get; set; }
    public IEnumerable<SelectListItem> Products { get; set; }
    public int SelectedProductId { get; set; }
    public DateTime OrderDate { get; set; }
    public bool OrderSent { get; set; }

}

Мой контроллер выглядит так

 [HttpGet]
    public ActionResult Create()
    {
        var model = new CreatePurchaseViewModel
                        {
                            Products = context.Products.Select(x =>
                                                        new SelectListItem()
                                                            {
                                                                Text = x.ProductName,
                                                                Value = x.ProductID
                                                            })
                        };
       return View(model);
    }

Однако он жалуется, что Value = x.Product не может преобразовать тип int в строку. Поэтому, если я добавляю .ToString, он компилируется нормально, но когда я пытаюсь загрузить представление, я получаю ошибку

LINQ to Entities не распознает метод метода System.String ToString (), и этот метод нельзя преобразовать в выражение хранилища.

My View

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
    <legend>CreatePurchaseViewModel</legend>

    <div class="editor-label">
        @Html.LabelFor(model => model.SelectedProductId)
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(x => x.SelectedProductId,Model.Products)
        @Html.ValidationMessageFor(model => model.SelectedProductId)
    </div>
    <div class="editor-label">
        @Html.LabelFor(model => model.OrderDate)
    </div>
    <div class="editor-field">
        @Html.TextBoxFor(model=>model.OrderDate)
        @Html.ValidationMessageFor(model => model.OrderDate)
    </div>
    <div>
    Sent
    @Html.RadioButtonFor(model => model.OrderSent, "Sent", new { @checked = true })
    Not Sent
    @Html.RadioButtonFor(model=>model.OrderSent,"Not Sent")

Я довольно новичок как в Entity Framework, так и в MVC, поэтому любая помощь будет отличной.

Спасибо

1 Ответ

0 голосов
/ 11 февраля 2011

Вы не указали, как выглядит модель Product, но мы можем предположить, что свойство ProductID является целым числом, поэтому вам может потребоваться преобразовать его в строку:

[HttpGet]
public ActionResult Create()
{
    var model = new CreatePurchaseViewModel
    {
        Products = context.Products.Select(x =>
            new SelectListItem
            {
                Text = x.ProductName,
                Value = x.ProductID.ToString()
            }
        )
   };
   return View(model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...