Есть как минимум два разных способа сделать это.
Первый (лучше) использует модель для передачи данных.Для этого вы должны создать класс Model:
//Model.cs
public class MyModel
{
public bool UserCanCreate { get; set;}
}
и указать его в начале вашего представления (используйте типизированное представление):
@model %Your_model_namespace%.MyModel
...
<p>
@if (Model.UserCanCreate)
{
@Html.ActionLink("Create New", "Create")
}
И, конечно же, в вашем контроллеревыполните следующие действия:
public ActionResult YourAction()
{
...
MyModel model = new MyModel();
model.UserCanCreate = ... ; // Determine if link shall be visible here
...
return View(model);
}
Секунда (более быстрая, хотя и не рекомендуется): используйте коллекцию ViewData для передачи значений.
Например, в вашем действии контроллера выполните:
public ActionResult YourAction()
{
...
ViewData["UserCanCreate"] = ... ; // Determine if link shall be visible here
...
return View();
}
, и ваш взгляд будет выглядеть так:
...
<p>
@if ((bool)ViewData["UserCanCreate"])
{
@Html.ActionLink("Create New", "Create")
}
Также важно : есливы пытаетесь таким образом обезопасить некоторые действия, затем не забудьте добавить некоторые проверки разрешений в код действия «Создать» - иначе любой пользователь сможет выполнить его, просто введя соответствующий URL-адрес в адресную строку браузера - даже если ActionLinkотсутствует.
ОБНОВЛЕНИЕ
Что касается вашего комментария - вы, кажется, смешиваете доменные модели с моделями представления.Модели предметной области - это те, которые представляют сущности вашей базы данных, а модели представлений - те, которые следует использовать для представления.Обычно задачей контроллера является преобразование объектов из домена для просмотра моделей и наоборот.
В вашем случае EF-модели - это доменные модели.
Для ViewModel вы должны создать отдельный класс, который будет агрегировать ваш экземпляр модели домена и любые дополнительные свойства, которые вы хотите - например, UserCanCreate.
Пример класса модели:
public class UsersViewModel
{
public IEnumerable<DBName.Models.Users> Users { get; set; }
public bool UserCanCreate { get; set; }
... // Any other additional properties you may require
}
В вашем контроллере это будет:
public ActionResult YourAction()
{
...
UsersViewModel model = new UsersViewModel();
model.Users = ... ; // Get your IEnumerable<DBName.Models.Users> collection from DB and assign it to model property here
model.UserCanCreate = ... ; // Determine if link shall be visible here
...
return View(model);
}
и в поле зрения:
@model %Your_model_namespace%.UsersViewModel
... // use Model.Users wherever you need your IEnumerable<DBName.Models.Users>
<p>
@if (Model.UserCanCreate)
{
@Html.ActionLink("Create New", "Create")
}