Frage

Nachdem ich herumbastelt hat, um [dieses] [1] -Problem zu lösen, denke ich, dass der Kern des Problems der folgende ist:

Wenn Sie den HTML.Radiobutton () HTML -Helfer mit einem Enum -als -Wert -Feld verwenden, können Sie Ihre Option nur einmal auswählen. Nach dem Neustest der Seite ignorieren die Helfer den im Anruf festgelegten Wert und setzen alle Optionsfelder auf denselben Wert, sodass Sie den Wert sind, den Sie im vorherigen Beitrag zurückgewählt haben. Mache ich etwas falsch?

Beispiel (beobachten Sie die Wert der Knöpfe)

<fieldset>
    <legend>Test</legend>                            
    <div>
        <label for="SearchBag.EffectIndicatorAny" id="EffectIndicatorAnyLabel">
            Any
        </label>                
        <%=Html.RadioButton("SearchBag.EffectIndicator", "Any" , ViewData.Model.SearchBag.EffectIndicatorIsAny, new { @id = "SearchBag.EffectIndicatorAny" })%>
    </div>
    <div>
        <label for="SearchBag.EffectIndicatorSolid" id="EffectIndicatorSolidLabel">
            Solid
        </label>                
        <%=Html.RadioButton("SearchBag.EffectIndicator", "Solid", ViewData.Model.SearchBag.EffectIndicatorIsSolid, new { @id = "SearchBag.EffectIndicatorSolid" })%>
    </div>
    <div>
        <label for="SearchBag.EffectIndicatorEffect" id="EffectIndicatorEffectLabel">
            Effect
        </label>                
        <%=Html.RadioButton("SearchBag.EffectIndicator", "Effect", ViewData.Model.SearchBag.EffectIndicatorIsEffect, new { @id = "SearchBag.EffectIndicatorEffect" })%>
    </div>
</fieldset>

Wird erzeugen

<fieldset>
    <legend>Effect</legend>                            
    <div class="horizontalRadio">
        <label for="SearchBag.EffectIndicatorAny" id="EffectIndicatorAnyLabel">
            Any                                      
        </label>                
        <input checked="checked" id="SearchBag.EffectIndicatorAny" name="SearchBag.EffectIndicator" type="radio" value="Any" />
    </div>
    <div class="horizontalRadio">
        <label for="SearchBag.EffectIndicatorSolid" id="EffectIndicatorSolidLabel">
            Solid
        </label>                
        <input id="SearchBag.EffectIndicatorSolid" name="SearchBag.EffectIndicator" type="radio" value="Solid" />
    </div>
    <div class="horizontalRadio">
        <label for="SearchBag.EffectIndicatorEffect" id="EffectIndicatorEffectLabel">
            Effect
        </label>                
        <input id="SearchBag.EffectIndicatorEffect" name="SearchBag.EffectIndicator" type="radio" value="Effect" />
    </div>
</fieldset>

Und wird das zweite Mal erzeugen:

<fieldset>
    <legend>Effect</legend>                            
    <div class="horizontalRadio">
        <label for="SearchBag.EffectIndicatorAny" id="EffectIndicatorAnyLabel">
            Any                                      
        </label>                
        <input id="SearchBag.EffectIndicatorAny" name="SearchBag.EffectIndicator" type="radio" value="Solid" />
    </div>
    <div class="horizontalRadio">
        <label for="SearchBag.EffectIndicatorSolid" id="EffectIndicatorSolidLabel">
            Solid
        </label>                
        <input checked="checked" id="SearchBag.EffectIndicatorSolid" name="SearchBag.EffectIndicator" type="radio" value="Solid" />
    </div>
    <div class="horizontalRadio">
        <label for="SearchBag.EffectIndicatorEffect" id="EffectIndicatorEffectLabel">
            Effect
        </label>                
        <input id="SearchBag.EffectIndicatorEffect" name="SearchBag.EffectIndicator" type="radio" value="Solid" />
    </div>
</fieldset>
War es hilfreich?

Lösung

Dies ist auf einen Fehler im ASP.NET -MVC -Beta -Code zurückzuführen. Ich habe eine vollständige Erklärung des Problems im ASP.NET MVC Forum geschrieben. Beziehen Sie sich darauf Verknüpfung

Andere Tipps

Für den Fall, dass sich jemand hier kümmert, ist es eine sehr schnelle und schmutzige Arbeit in Erwartung des nächsten Updates des Frameworks. Es erstellt nur den Wert mit Ihrem Wert. Es ist nicht getestet, nicht garantiert, was auch immer.

Setzen Sie es in Ihre Bibliothek in der HTMLHelper -Klasse oder überall dort, wo Sie HTMLHelper -Ausdehnung einsetzen. Fügen Sie die folgenden USings hinzu:

  • System.Text.Regularexpressions;
  • System.Web.Mvc.html;

    /*ToDo: remove when patched in framework*/
    public static string MonkeyPatchedRadio(this HtmlHelper htmlHelper, string name, object value, bool isChecked, object htmlAttributes){
        string monkeyString = htmlHelper.RadioButton(name, value, isChecked, htmlAttributes);
        monkeyString = Regex.Replace(monkeyString, "(?<=value=\").*(?=\".*)", value.ToString());            
        return monkeyString;
    }
    

Ich weiß, dass es besser und so weiter gemacht werden kann, aber ich hoffe wirklich, dass es sowieso bald repariert wird. Wenn Sie Lust verbessern möchten, ist es Community -Wiki, also mach weiter

Eine Sache zu überprüfen. Verwenden Sie das aktualisierte Modell, um Ihre Ansicht zu rendern? IE sind die gleichen Modelldaten, die aus dem Beitrag aktualisiert wurden, als er beim zweiten Mal angezeigt wird?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top