2017-11-25 4 views
1

Ich muss Schaltfläche deaktivieren, wenn Eigenschaft "Flag" wahr ist. Dies ist mein Modell und Controller.Wie kann ich die Schaltfläche vom Controller deaktivieren?

public class User { 

     public string Name { get; set; } 
     public bool Flag{ get; set; } 

    } 

Controller

public ViewResult Index() { 

    var userFlag = context.Users.Where(u => u.Flag = true).FirstOrDefault(); 

    if (userFlag != false) 
       { 
        // disable button 
       } 
else 
       { 
        // enable button 
       } 

    return View(); 

} 
+1

@IrishChieftain in Ansicht deaktivieren anzuzeigen: Kaum in einem MVC-Projekt nützlich. – David

+1

Wenn Sie nur Benutzer erhalten, deren Flag wahr ist, wie werden Sie dann einen Benutzer mit deaktiviertem Flag zurückgeben? –

+1

@OrelEraki: Ich bin auch neugierig, wie das 'userFlag' Objekt in diesem Code jemals ein' bool' sein könnte ... – David

Antwort

1

Sie haben, dass Flag (boolean value) zu der Ansicht und Rendern mit disabled Attribut die Taste bedingt passieren

Sie können die Booleschen Wert auf vielfältige Weise übergeben.

Wenn Sie ein Ansichtsmodell haben, legen Sie die entsprechende Eigenschaft fest. Nehmen wir an, Sie haben ein View-Modell namens YourViewModel für Ihre Ansicht und es hat eine IsEnabled Eigenschaft des booleschen Typs, setzen Sie das in Ihrer Aktionsmethode und senden Sie das View-Modell an die View.

Also in Ihrer Aktionsmethode

var vm = new YourViewModel(); 
var user = context.Users.Where(u => u.Flag == true).FirstOrDefault(); 
vm.IsEnabled= user != null && user.Flag; 
// Pointless because you are getting the one with True; 
// So the value will be always true if user is not null 
return View(vm); 

und die Aussicht, überprüfen Sie die IsEnabled Eigenschaft des Modells,

@model YourViewModel 
@if (Model.IsEnabled) 
{ 
    <input type="submit" value="Save" /> 
} 
else 
{ 
    <input type="submit" value="Save" disabled="disabled" /> 
} 

Oder wenn Sie nicht über ein Ansichtsmodell haben/Ihre Ansicht ist nicht stark in eine Klasse eingetippt, können Sie den booleschen Wert als das Modell der Seite übergeben

var user = context.Users.Where(u => u.Flag = true).FirstOrDefault(); 
var flag= user != null && user.Flag; 
// Pointless because you are getting the one with True; 
// So the value will be always true if user is not null 
return View("Index",flag); 

und in der Ansicht

@model bool 
@if (Model) 
{ 
    <input type="submit" value="Save" /> 
} 
else 
{ 
    <input type="submit" value="Save" disabled="disabled"/> 
} 

Eine weitere Option ist ViewBag zu verwenden, um diese boolean Flag aus Action-Methode zur Übertragung anzuzeigen.

var user = context.Users.Where(u => u.Flag == true).FirstOrDefault(); 
ViewBag.IsEnabled = user != null && user.Flag; 
// Pointless because you are getting the one with True; 
// So the value will be always true if user is not null 
return View(); 

und in der Ansicht

@if (ViewBag.IsEnabled !=null && ViewBag.IsEnabled) 
{ 
    <input type="submit" value="Save" /> 
} 
else 
{ 
    <input type="submit" value="Save" disabled="disabled" /> 
} 

Hier bin Rendering i die aktivierte Taste nur, wenn der Flag-Wert von Ihrer Platte true ist. Stellen Sie den Code, um es zu negieren nach Bedarf (in Ihrer Frage, ist es andersrum)

1

Sie deaktivieren die Schaltfläche in der Ansicht, nicht in der Steuerung. Zuerst muss der Controller einige Informationen an die Ansicht senden. Idealerweise ist dies in Form eines Ansichtsmodells, aber jetzt geben wir einfach einen einfachen Wert in die ViewBag. Etwas wie das:

ViewBag.UserFlag = userFlag; 
return View(); 

Dann in der Ansicht können Sie diesen Wert verwenden. Zum Beispiel:

@if(ViewBag.UserFlag == true) 
{ 
    <button type="button" disabled>Click here</button> 
} 
else 
{ 
    <button type="button">Click here</button> 
} 

Oder aber Ihre Schaltfläche ist "aktiviert" vs. "deaktiviert" in Ihrem HTML. Sie können dies sogar mit dem ternären Bedingungsoperator in eine einzige Zeile komprimieren, wenn Sie möchten, es ist eine Frage der persönlichen Präferenz.

Aber der Punkt ist, dass der Controller bietet einfach die Ansicht mit den Daten, die es benötigt, um die Benutzeroberfläche zu rendern. Es liegt in der Verantwortung der Ansicht, auf diese Daten zu reagieren und die Benutzeroberfläche zu rendern.

0

Sie cas verwendet ViewBag Flag-Wert von Regler passieren, wie

public ViewResult Index() {  
    var userFlag = context.Users.Where(u => u.Flag = true).FirstOrDefault(); 
    ViewBag.UserFlag = userFlag == null ? true : false; 
    return View();  
} 

Sie Taste als

<input type="button" value="Save" @{ if (ViewBag.UserFlag == true){ @: disabled="disabled"} } /> 
Verwandte Themen