2017-01-16 12 views
0

Ich habe eine Anwendung, in der ein Benutzer ein Formular bearbeiten kann. Dies ist mein Code:asp.net mvc: deaktivieren mvc form

-Controller und Ansichtsmodell:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Edit(MyGlobalObject MyGlobalObject) 
    { 
     MyGlobalObject.Save(); 
     return View(); 
    } 
} 

public class MyGlobalObject 
{ 
    public MyObjectToEdit MyObjectToEdit { get; set; }   
} 

public class MyObjectToEdit 
{ 
    public int MyProperty { get; set; } 

    public string MyProperty1 { get; set; } 

    public bool MyProperty2 { get; set; } 
} 

Mein Rasierer Ansicht:

@model TestAppliWeb.Controllers.MyGlobalObject

@using (Html.BeginForm("Edit", "HomeController")) 
{ 
    @Html.AntiForgeryToken() 
    @Html.EditorFor(m => m.MyObjectToEdit) 
} 

Alles funktioniert gut. Aber ich möchte ein neues Feature in dieses Formular bringen, abhängig von einer bestimmten Bedingung, die von MyProperty2 von MyObjectToEdit abhängig ist. Ich möchte das Formular weiterhin anzeigen, aber es deaktivieren: das Formular muss dem Benutzer angezeigt werden, aber er kann nicht Bearbeiten Sie alles und klicken Sie auf Speichern.

Wenn MyProperty2 true ist, kann das Formular weiterhin bearbeitet werden, andernfalls muss das Formular deaktiviert werden. Aber ich weiß nicht, wie ich es mit einem Minimum an Code in meiner Rasierklinge die Wiedergabe der Form beeinflussen kann. Ich habe eine Lösung, aber es scheint zu "unrein": Ich habe alle Elemente des Formulars mit Javascript und CSS deaktiviert.

Gibt es irgendwelche mvc HTML-Helfer oder etwas ähnliches in der Rasierer Ansicht zu schreiben, um das Formular zu deaktivieren.

Vielen Dank im Voraus für Ihre Hilfe

+0

Es scheint etwas zu lösen mit eckigen – NicoRiff

+1

Eine deaktivierte Form ist sinnlos, und Sie sollten eine andere Ansicht mit einfachem Text nur aus dem Controller basierend auf der Bedingung anzeigen –

+0

_I deaktiviert alle Elemente des Formulars mit Javascript und CSS_ Was stimmt damit nicht? '$ (". myform-item "). prop (" deaktiviert ", true)'. Aber, wirklich, zeigen Sie einfach ein Formular nicht an, bis eine Änderung notwendig ist. – Jasen

Antwort

1

ich verwenden in der Regel jQuery Eingabefelder zu deaktivieren und aktivieren.

Disable:

$('#idVar').prop("disabled", true); 

Enable:

$('#idVar').prop("disabled", false); 
0

Was Sie so etwas wie das tun können, ist folgende:

erstellen Helfer alle die halten Formularinhalt

@helper FormContent() 
{ 
    @Html.EditorFor(m => m.MyObjectToEdit) 
} 

Ihrer Ansicht nach Modell (oder ViewBag) halten ein Variable Bezeichnen wenn diese Form nur lesbar angezeigt werden soll, dann diesen Wert in der Razor Ansicht sollte all

@if (Model.IsReadOnly) 
{ 
    <fieldset disabled="disabled"> 
     @FormContent() 
    </fieldset> 
} 
else 
{ 
    @using (Html.BeginForm("Edit", "HomeController")) 
    { 
     @Html.AntiForgeryToken() 

     @FormContent() 

     <input type="submit" id="submitButton" /> 
    } 
} 

eine Fieldset für behinderte liest Einstellung deaktivieren Kontrollen in ihm. Sie können CSS auch verwenden, um alle Feldgruppenformatierungen zu entfernen, die Sie nicht möchten.

Sie haben auch den Vorteil, dass Sie kein tatsächliches Formular-Tag oder keinen Submit-Button ausgeben, da es nur gelesen werden kann.