2017-10-24 3 views
0

Greating: D, ich bin ein MVC-Noob, ich gebe es zu. Ich arbeite an einem Testprojekt, um mich mit der Idee vertraut zu machen. Es ist ein super einfaches Text-Hex-Programm.MVC Single Page App nicht funktioniert hat beabsichtigt

Ich werde aufschlüsseln, was es tut, was dann passiert.

Ich habe meine Ansicht, die eine Textarea hat, und eine Schaltfläche senden. Benutzer gibt Daten ein, klickt auf "Senden".

@model MVC.Models.ClsTextToHex 

@{ 
    ViewBag.Title = "Text To Hex"; 
} 

<h2>Convert To Hex</h2> 

<form method="post"> 
    <textarea name="message" style="margin: 0px; width: 313px; height: 150px"> @Model.HexText</textarea> 

    <div> 
    <input type="submit" value="Convert" /> 
    </div> 
</form> 

es geht an die Steuerung:

[HttpPost] 
    public ActionResult CTHView(ClsTextToHex ConvertToHex, string message) 
    { 
     ConvertToHex.ConvertTTH(message, ConvertToHex.Hexed); 
     return CTHView(ConvertToHex); 
    } 

-Controller spricht dann mit meinem Modell, das 1.RealText zwei Variablen setzt (enthalten, was es war) und 2.Hexed (um die Hex zu enthalten. ..). Mein Controller lädt dann die Ansicht neu, in der die Ansicht nun das Hex anstelle des Textes anzeigt.

HexImage

jedoch Nun möchte Ich mag die Hex, zurück in Text verwandeln. Mein Modell hat den Code, aber da das Modell jedes Mal zurückgesetzt wird, kann ich nichts mehr verfolgen, um Werte erneut zu senden oder neue zu aktualisieren, es wandelt den Text einfach in hexadezimal um.

So meine Frage kommt auf ... Wie kann ich ein Modell verwenden, wo meine variablen Daten nicht jedes Mal sauber gelöscht werden. Oder bin ich nur auf dem Holzweg? Ich komme von einem C# -Anwendungs-basierten Hintergrund, so etwas wie das zu tun ist so einfach wie das Initialisieren einer Klasse, das Einstellen der Werte und das Verteilen von ... (obwohl ich das nicht wirklich tun müsste, aber ich könnte) scheint ein wenig kniffliger ist asp.net ...

Ich habe eine Menge Antwort gelesen, und Videos gesehen, und bevor jemand etwas sagt, möchte ich die einzelne Seite adressieren. Und wirklich, ich sehe keinen Grund, dass das nicht eine Seite sein kann statt zwei, obwohl die meisten der Dinge, die ich gesehen habe, dich normalerweise auf eine neue Seite schicken, mit dem gleichen Blick, der den Benutzer trügt, weil er denkt, dass es dasselbe ist Seite. Ich verstehe das Konzept, ich fühle nicht, wie es hier ins Spiel kommt.

+0

Sie möchten also wissen, ob der aktuelle Wert der neue Texteintrag des Benutzers oder ein Hexwert ist, der bereits in der vorherigen Eingabe generiert wurde? – Shyju

+0

Was ich tun möchte ist, wenn Sie zum ersten Mal auf die Seite kommen, tippen Sie Ihren Text, klicken Sie auf konvertieren. Der Text wird konvertiert und die Seite wird aktualisiert. Jetzt sollte es "Convert to Text" heißen, wenn Sie auf convert klicken, wird es von Hex in Text umgewandelt. Aber ich bin nicht in der Lage, einen Weg zu finden, es in seiner jetzigen Form zu tun. –

+0

Ich kann den Hex-Wert nur gut bekommen, es ist das Problem, das Hex wieder in Text zu bekommen. Ich möchte, dass mein Modell eine bool hat, die falsch ist und dann auf true gesetzt wird, wenn ein Wert in hex konvertiert wird. Dies wird dann verwendet, um Text in hex zu konvertieren und bool wird auf false gesetzt. Aber mit dem, wie es jetzt geschrieben ist, bekomme ich jedes Mal ein sauberes Modell, wenn ich auf "Konvertieren" klicke und mir keine andere Wahl lasse, als den Text in Hex umzuwandeln. –

Antwort

0

Grundsätzlich jedes Mal, wenn Sie den Nur-Text konvertieren, müssen Sie diese Informationen (konvertiert Klartext in Hexadezimal) irgendwo, so dass das nächste Mal das Formular übermittelt, können Sie bestimmen, ob in hex konvertieren oder konvertieren es zurück zum Klartext.

Da Http zustandslos ist, müssen wir den Status in der Form senden Anfrage senden. Jedes Mal, wenn Sie reinen Text in Hexadezimalwerte umwandeln, behalten Sie eine boolesche Variable in Ihrem Formular mit dem Wert "true" bei. Wenn das Formular übermittelt wird, überprüfen Sie dies.

Sie können diese boolesche Eigenschaft zu Ihrer Ansichtsmodellklasse hinzufügen.

public class ClsTextToHex 
{ 
    public string Text { set; get; } 
    public bool IsHex { set; get; } 
} 

Und aus Ihrer Sicht, halten Sie dies in einer versteckten Variable. Basierend auf dem Wert dieser booleschen Eigenschaft können Sie auch Ihren Schaltflächentext bedingt aktualisieren.

@model YourNameSpaceGoesHere.ClsTextToHex 
@using (Html.BeginForm("ToHex", "Home")) 
{  
    @Html.HiddenFor(f => f.IsHex) 
    @Html.TextAreaFor(f => f.Text) 
    <div> 
     @{ 
      var btnText = Model != null && Model.IsHex ? "Convert back" : "Convert to Hex"; 
     } 
     <input type="submit" value="@btnText"/>  
    </div> 
} 

Jetzt müssen Sie nur noch diesen Eigenschaftswert in Ihrer HttPost-Aktion überprüfen. Die wichtige Sache zu erinnern ist, da wir den Eigenschaftswert des Ansichtsmodells aktualisieren und zur gleichen Ansicht senden, müssen wir explizit das Modellzustandsverzeichnis löschen, damit die Hilfsmethoden (TextAreaFor und HiddenFor) das richtige verwenden (aktualisierter) Wert. Sie können dazu die Methode ModelState.Clear() verwenden.

+0

Anstatt dieses var btnText = Model! = Null && Model.IsHex? "Zurückkonvertieren" kann ich nicht auch eine Textvar in meinem Modell haben? oder diese schlechte Praxis? –

Verwandte Themen