Figura Disclosure
- Questa risposta è copia/incollato da un'altra domanda:
- Questa risposta è simile ad altre risposte qui.
- Questa risposta utilizza
cshtml
pagine anziché ascx
controlli.
- Questa risposta offre una soluzione di sola visualizzazione anziché una soluzione solo per il controller.
- Non credo che la mia risposta sia "migliore", ma penso che per alcuni potrebbe essere più semplice.
dinamica CSS in un CSHTML file
Io uso CSS commenta /* */
per commentare un nuovo <style>
tag e poi ho return;
prima del tag di stile di chiusura:
/*<style type="text/css">/* */
CSS GOES HERE
@{return;}</style>
JS dinamico in un file CSHTML
ho utilizzare i commenti JavaScript //
per commentare un nuovo <script>
tag e poi ho return;
prima del tag script di chiusura:
//<script type="text/javascript">
JAVASCRIPT GOES HERE
@{return;}</script>
MyDynamicCss.cshtml
@{
var fieldList = new List<string>();
fieldList.Add("field1");
fieldList.Add("field2");
}
/*<style type="text/css">/* */
@foreach (var field in fieldList) {<text>
input[name="@field"]
, select[name="@field"]
{
background-color: #bbb;
color: #6f6f6f;
}
</text>}
@{return;}</style>
MyDynamicJavsScript.cshtml
@{
var fieldList = new List<string>();
fieldList.Add("field1");
fieldList.Add("field2");
fieldArray = string.Join(",", fieldList);
}
//<script type="text/javascript">
$(document).ready(function() {
var fieldList = "@Html.Raw(fieldArray)";
var fieldArray = fieldList.split(',');
var arrayLength = fieldArray.length;
var selector = '';
for (var i = 0; i < arrayLength; i++) {
var field = fieldArray[i];
selector += (selector == '' ? '' : ',')
+ 'input[name="' + field + '"]'
+ ',select[name="' + field + '"]';
}
$(selector).attr('disabled', 'disabled');
$(selector).addClass('disabled');
});
@{return;}</script>
alcun controller richiesto (che utilizzano Vista/Condiviso)
ho messo entrambi i miei script dinamici in Views/Shared/
e posso facilmente incorporare in qualsiasi pagina esistente (o in _Layout.cshtml
) utilizzando il seguente codice:
<style type="text/css">@Html.Partial("MyDynamicCss")</style>
<script type="text/javascript">@Html.Partial("MyDynamicJavaScript")</script>
Utilizzando un controller (opzionale)
Se si preferisce si può creare un controller ad esempio
<link rel="stylesheet" type="text/css" href="@Url.Action("MyDynamicCss", "MyDynamicCode")">
<script type="text/javascript" src="@Url.Action("MyDynamicJavaScript", "MyDynamicCode")"></script>
Ecco cosa il controller potrebbe essere simile
MyDynamicCodeController.cs (opzionale)
[HttpGet]
public ActionResult MyDynamicCss()
{
Response.ContentType = "text/css";
return View();
}
[HttpGet]
public ActionResult MyDynamicJavaScript()
{
Response.ContentType = "application/javascript";
return View();
}
Note
- La versione del controller non è testato. L'ho appena scritto in cima alla mia testa.
- Dopo aver riletto la mia risposta, mi viene in mente che potrebbe essere altrettanto semplice commentare i tag di chiusura piuttosto che usare il cshtml
@{return;}
, ma non l'ho provato. Immagino sia una questione di preferenza.
- Per quanto riguarda la mia intera risposta, se trovi errori di sintassi o miglioramenti, per favore fatemelo sapere.
Ecco domanda simile con la soluzione più elegante: http://stackoverflow.com/questions/16092473/dynamically-generated-javascript-css-in-asp-net-mvc –