2015-06-08 2 views
0

В приведенном ниже коде ActionLink как назначить строчную переменную C# на @class в представлении ASP.NET MVC 5?Как назначить переменную C# переменной класса CSS в ASP.NET MVC ActionLink

@Html.ActionLink("Manage List", "Index", new { @class = "DynamicClassName" }); 

Я хочу, чтобы заменить статическую строку @class = "DynamicClassName" с чем-то динамическим, похожим на @class = @myChangingColorClass

// Error 
// yes, myChangingColorClass is declared C# valid string 
@Html.ActionLink("Manage List", "Index", new { @class = @myChangingColorClass }); 
+0

Где Вы заявляете 'myChangingColorClass' точно? – ekad

+0

@ekad в представлении CSHTML, нет ошибки, и просмотр его в отладчике кажется прекрасным. Должен ли я создать блок кода объявления прямо внутри нового блока кода? – Brad

+0

Как и где объявляется 'myChangingColorClass'?Что такое сообщение об ошибке? –

ответ

2

Это можно сделать двумя способами один является путем установки значения в классе ViewModel или установив значение в ViewBag, ViewData или TempData.

Way 1) Предпочитаемый способ сильно типизированных: Установить имя класса CSS для ViewModel атрибута класса:

Class Student 
{ 
    public ID BIGINT {get; set;} 
    ... //other properties 

} 

Class StudentViewModel : Student 
{ 
    public CssClass string {get; set;} 
} 

// контроллер действия

public ActionResult Index(){ 
    StudentViewModel objModel; 
    //initialize model 

    objModel.CssClass = "myCssClass"; //set css class name to viewmodel 
    return View(objModel); 
} 

// ввиду использования кода, как показано ниже:

@model namespace.StudentViewModel; 
@Html.ActionLink("Manage List", "Index", new { @class = Model.CssClass }) 

Путь 2) Задайте имя класса css, чтобы просмотреть сумку/viewdata/tempdate. Но это не предпочтительнее.

// контроллер действия

// ввиду использования кода, как показано ниже:

@Html.ActionLink("Manage List", "Index", new { @class = @ViewBag.CssClass }) 
//Or 
@Html.ActionLink("Manage List", "Index", new { @class = @Convert.toString(ViewData["CssClass"]) }) 
//Or 
@Html.ActionLink("Manage List", "Index", new { @class = @Convert.toString(TempData["CssClass"]) }) 

Пожалуйста, дайте мне знать, это работает для вас?

+0

Должен был прочитать мой ответ. Сохранено ваше драгоценное время. :) –

2

Вы можете попробовать положить строковую переменные (свойство) в вашей модели или ViewModel классом и затем просто установите его из кода и используйте его в своем виде следующим образом:

@Html.ActionLink("Manage List", "Index", new { @class = @Model.myChangingColorClass}); 
+0

Ответ должен быть подробно, он добавляет знания. –

3

Вы должны объявить myChangingColorClass в блоке кода в cshtml ниже

@{ 
    string myChangingColorClass = "myClass"; 
} 
1
@{ 
    string myChangingColorClass = "myClass"; 
} 

@Html.ActionLink("Manage List", "Index", null, new { @class = @myChangingColorClass }); 

он будет генерировать

<a class="myClass" href="/ControllerName">Manage List</a> 

но с использованием этого

@Html.ActionLink("Manage List", "Index", new { @class = @myChangingColorClass }); 

он будет генерировать

<a href="/ControllerName?class=myClass">Manage List</a> 

это предполагает, что он, как параметр этого метода .., что u не хочу ..

добавить null, прежде чем new { @class = @myChangingColorClass } решит эту проблему