Добавление данных в базу данных с использованием MVC - с отношениями FK - PullRequest
0 голосов
/ 20 июля 2010

У меня есть база данных, и я использую Entity Framework с Linq 2 Enities.Я работаю с ASP.NET MVC 2.

У меня есть база данных с двумя таблицами, как показано ниже:

Classifieds             Catergories
ID(PK)                  CatID(PK)
CatID(FK)               CatName
Desc
...

Очевидно, когда пользователь добавляет новое объявление и когда он выбираеткатегория, которую они не хотят видеть CatID, поэтому мой вопрос заключается в следующем.Как я могу позволить пользователю добавить объявление, выбрав CatName?

Я использую строго типизированные представления.Реструктуризация базы данных исключена.Ответьте на C #, пожалуйста.

Спасибо,

Ответы [ 3 ]

0 голосов
/ 20 июля 2010

Получить существующие категории из базы данных (желательно через репозиторий, но для краткости я просто показываю запрос Linq to Entities):

var db = new YourObjectContextImplementation();
var categories = db.Categories.AsEnumerable();

Перешлите их в ваше представление через модель представления.По вашему мнению, вы выводите форму как-то, чтобы пользователь мог добавить объявление.Вместо того, чтобы давать им текстовое поле (или список выбора) для идентификатора категории, вы даете им список выбора, где значение является идентификатором, а text / inner html является категориейназвание.Таким образом, пользователь видит только имя, но ваше действие получает целочисленный параметр, переданный ему.


ОБНОВЛЕНИЕ в ответ на комментарий:

Я предполагаю, что вы в настоящее время передаете новыйClassified объект как модель представления, а затем использование помощников EditorFor?Все хорошо, но вам, вероятно, следует обернуть объект Classified в конкретную модель представления, например ClassifiedAddModel, следующим образом:

public class ClassifiedAddModel
{
    public Classified NewClassified { get; set; }
    public IEnumerable<Category> ExistingCategories { get; set; }
}

Затем можно создать экземпляр и заполнить объект ClassifiedAddModel вдействие контроллера, передайте его в качестве модели вашему представлению и создайте форму, используя синтаксис, такой как

<%: Html.EditorFor(Model.NewClassified.Description) %>
<%: Html.EditorFor(Model.Categories "CategoriesEditor") %>

, где "CategoriesEditor" - это имя пользовательской модели представления, которая принимает категории и отображает список выбора сих.Однако главное в приведенном выше примере - показать, как вы можете получить доступ как к свойствам объекта Classified, так и ко всем существующим категориям.

0 голосов
/ 20 июля 2010

Я придумала это решение:

Контроллер:

    var Catergories = classifiedsRepositry.GetClassifiedsCategories().AsEnumerable();

    ViewData["CatID"] = new SelectList(Catergories, "CatID" , "Category");

Просмотр:

<%: Html.DropDownListFor(model => model.CatID, (SelectList)ViewData["CatID"],"--Pick A Category--")%>

И это очень просто и работает отлично!

0 голосов
/ 20 июля 2010

Вы можете использовать раскрывающийся список, отображающий название категории, но используя Id в качестве значения:

<%-- Using your Model has a list of Category objects set --%>
<%= Html.DropDownList("classified.Category.Id", new SelectList(Model.Categories, "Id", "Name") %> 

Ваше действие контроллера может выглядеть примерно так:

public ActionResult Save(Classified classified)
{
   int categoryId = classified.Category.Id;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...