asp.net mvc и несколько моделей и моделей - PullRequest
1 голос
/ 23 февраля 2011

Я хочу попытаться сделать это как можно более простым.

Допустим, у меня есть Модель проекта и Модель задач

Я хочу создать проект с 3 задачами, назначенными этомупроект в одной единственной форме

Каков наилучший способ сделать это ??

Будет ли метод просто получить проект или что еще мне нужно иметь там ... просто сохранит проект (в хранилище) также сохранить связанные задачи? ... В представлении ... мне нужно ViewModel .. Я в замешательстве.пожалуйста помогите

public ActionResult Create(Project p){

}

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

Вот как бы я поступил:

public class TaskViewModel
{
    public string Name { get; set; }
}

public class ProjectViewModel
{
    public string ProjectName { get; set; }
    public IEnumerable<TaskViewModel> Tasks { get; set; }
}

, затем контроллер:

public class ProjectsController: Controller
{
    public ActionResult Index()
    {
        var project = new ProjectViewModel
        {
            // Fill the collection with 3 tasks
            Tasks = Enumerable.Range(1, 3).Select(x => new TaskViewModel())
        };
        return View(project);
    }

    [HttpPost]
    public ActionResult Index(ProjectViewModel project)
    {
        if (!ModelState.IsValid)
        {
            // The user didn't fill all required fields =>
            // redisplay the form with validation error messages
            return View(project);
        }

        // TODO: do something with the model
        // You could use AutoMapper here to map
        // the view model back to a model which you 
        // would then pass to your repository for persisting or whatever

        // redirect to some success action
        return RedirectToAction("Success", "Home");
    }
}

и затем представление (~/Views/Projects/Create.cshtml):

@model AppName.Models.ProjectViewModel
@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(x => x.ProjectName)
        @Html.EditorFor(x => x.ProjectName)
        @Html.ValidationMessageFor(x => x.ProjectName)
    </div>

    @Html.EditorFor(x => x.Tasks)

    <input type="submit" value="Create!" />
}

и соответствующий шаблон редактора задач (~/Views/Projects/EditorTemplates/TaskViewModel.cshtml):

@model AppName.Models.TaskViewModel
<div>
    @Html.LabelFor(x => x.Name)
    @Html.EditorFor(x => x.Name)
    @Html.ValidationMessageFor(x => x.Name)
</div>
0 голосов
/ 23 февраля 2011

Добавьте коллекцию моделей Task к модели Project и используйте цикл foreach для отображения задач или повторите частичное представление, которое знает, как отобразить одну задачу.

...