ASP.NET MVC: установка родительского внешнего ключа при создании дочерней сущности - PullRequest
2 голосов
/ 26 декабря 2009

у меня есть:

Объект «Задача», который содержит иностранный ключ для объекта «Проект». В модели MVC у меня есть представление ProjectDetails, где у меня есть ActionLink для создания новой задачи

Мне нужно установить ProjectReference для нового объекта Task. ProjectReference передается параметром url (CreateTask?projectId=4)

В проекте Представление деталей у меня есть:

<%= Html.ActionLink("Create New Task", "CreateTask", new {???Set the ProjectID???  })%>

1) Как установить ProjectReference "ProjectID"?

2) Используете ли ViewContext.Controller.ValueProvider["id"].RawValue для получения хорошего параметра urlparameter?

Спасибо !!

Ответы [ 2 ]

1 голос
/ 26 декабря 2009

Разве вы не можете просто установить идентификатор проекта в модели, которую вы передаете представлению? Что-то вроде:

public ActionResult ProjectDetails()
{
    ViewData["projectId"] = GetProjectId();

    return View();
}

Тогда в поле зрения:

<%= Html.ActionLink("Create New Task", "CreateTask", ViewData["projectId"]) %>

Также не рекомендуется использовать Request.Params как этот. Вместо этого выполните действие с параметром "projectId", например:

public ActionResult CreateTask(int projectId)

Подробнее см. Передача данных в приложении ASP.NET MVC

Другое дело, что одна из идей использования ASP.NET MVC состоит в том, чтобы ваши URL читались. Попробуйте использовать URL-адрес, например /projects/5/createtask/ вместо /createtask.aspx?projectid=5. Подробнее об этом см. Скотт Гатри

, Маршрутизация URL с ASP.NET MVC
0 голосов
/ 26 декабря 2009

ОК, я нашел решение, но оно не так красиво:

в projectdetails.aspx:

<%= Html.ActionLink("Create New Task", "CreateTask", new { projectId = ViewContext.Controller.ValueProvider["id"].RawValue })%>

в taskcreateMethod:

int projectId = Convert.ToInt32(Request.Params["projectId"]);
taskToCreate.Project= (from p in _db.Project where p.Id ==projectId select p).First();
_db.AddToTask(taskToCreate);
_db.SaveChanges();

return RedirectToAction("Details", "Home", new { id = projectId });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...