Заполнение поля выбора в форме с использованием связанного идентификатора в MVC3 - PullRequest
1 голос
/ 31 января 2011

У меня очень простая структура данных с двумя моделями.Первый, содержащий UserName, UserQuestion и userLocationID, а другой с LocationName и LocationID, locationID в первой таблице связан с LocationName второй таблицы.Однако я не указал никаких отношений.Я настроил структуру данных, используя метод кода «сначала», используемый здесь .

Я хотел бы создать форму, которая имеет два текстовых ввода для ввода пользователем своего имени и вопросаи поле выбора, которое заполняется всеми locationNames из второй таблицы.Однако я не могу создать модель, которая позволяет мне это делать.Нужно ли делать отдельную ViewModel?

Кто-нибудь знает простой учебник, который объяснит, как это сделать?

Я довольно новичок в MVC и в фреймворке dot net.,И я посмотрел на этот ответ , но я не могу изменить его в соответствии со своими потребностями.Так что извиняюсь, если я прошу что-то действительно простое.

1 Ответ

0 голосов
/ 30 июня 2011

Я могу привести пример для одного контроллера, одного представления и трех классов C #. Чтобы использовать этот код, создайте пустой проект MVC2 в Visual Studio и добавьте ссылку на Entity Framework dll версии 4.1. Если вам нужна помощь относительно того, где поместить эти файлы, я рекомендую Книга Стива Сандерсона MVC2 .

public class User
{
    public int ID { get; set; }
    public string UserName { get; set; }
    public string Question { get; set; }

    public virtual Location Category { get; set; }
}

public class Location
{
    public int ID { get; set; }
    public string LocationName { get; set; }
}

Репозиторий

using System.Data.Entity;
using System.Collections.Generic;
using System.Linq;

public class Repository : System.Data.Entity.DbContext
{
    public DbSet<User> User { get; set; }
    public DbSet<Location> Locations { get; set; }

    public Repository()
    {
        this.Database.Connection.ConnectionString = 
            @"Server=.;Database=Test;Integrated Security=SSPI";

        if (!this.Database.Exists())
        {
            this.Database.Create();
            this.Locations.Add(new Location { LocationName = "Queensway" });
            this.Locations.Add(new Location { LocationName = "Shepherds Bush" }); 
            this.SaveChanges();
        }
    }

    public IEnumerable<Location> GetLocations()
    {
        return this.Locations.Where(x => x.ID > -1);
    }

    public Location GetLocation(int id)
    {
        return this.Locations.First(x => x.ID == id);
    }

    public void SaveUser(User user)
    {
        this.User.Add(user);
        this.SaveChanges();
    }
}

Контроллеры \ HomeContoller.cs:

using System.Web.Mvc;

public class HomeController : Controller
{
    Repository repo = new Repository();

    [HttpGet]
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index(User user, int categoryId)
    {
        user.Category = repo.GetLocation(categoryId);
        repo.SaveUser(user);
        return View();
    }
}

Просмотров \ Home \ index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<User>" %>

<html> 
<body>
    <% using (Html.BeginForm())
       {%>
    Username: <%: Html.TextBoxFor(model => model.UserName) %><br />
    Question: <%: Html.TextBoxFor(model => model.Question) %><br />
    Location: <select name="categoryId">
        <% foreach (var location in new Repository().GetLocations())
           {%>
        <option value="<%= location.ID %>">
            <%= location.LocationName %></option>
        <%} %>
    <br />
    </select>
    <p>
        <input type="submit" value="Create" />
    </p>
    <% } %>
</body>
</html>
...