يقوم Html.RadioButton بتعيين كافة القيم على القيمة المحددة

StackOverflow https://stackoverflow.com/questions/277607

سؤال

بعد الترقيع لحل [هذه] [1] المشكلة، أعتقد أن جوهر المشكلة هو ما يلي:

عند استخدام مساعد Html.RadioButton() html مع حقل Enum كقيمة، يمكنك اختيار خيارك مرة واحدة فقط.بعد إعادة نشر الصفحة، سيتجاهل المساعدون القيمة المحددة في المكالمة ويقومون بتعيين جميع أزرار الاختيار على نفس القيمة، وهي القيمة التي حددتها في النشر السابق مرة أخرى.أفعل شيئا خاطئا؟

مثال (شاهد قيمة من الأزرار)

<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>

سوف يولد

<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>

وسوف تولد للمرة الثانية:

<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>
هل كانت مفيدة؟

المحلول

ويرجع ذلك إلى وجود خطأ في كود ASP.NET MVC Beta.لقد كتبت شرحًا كاملاً للمشكلة في منتدى asp.net MVC.الرجوع إلى هذا وصلة

نصائح أخرى

في حالة اهتمام أي شخص هنا، فهذا عمل سريع وقذر تحسبًا للتحديث التالي لإطار العمل.إنه فقط يستبدل القيمة بالقيمة الخاصة بك.لم يتم اختباره على الوحدة، وليس مضمونًا على الإطلاق.

ضعه في مكتبة فئة HtmlHelper الخاصة بك أو في أي مكان تضع فيه امتدادات HtmlHelper.أضف الاستخدامات التالية:

  • 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;
    }
    

أعلم أنه يمكن القيام بذلك بشكل أفضل وما إلى ذلك، ولكنني آمل حقًا أن يتم إصلاحه قريبًا على أي حال.إذا كنت ترغب في تحسينه، فهذا موقع ويكي مجتمعي، لذا تفضل بالمضي قدمًا

شيء واحد للتحقق.هل تستخدم النموذج المحدث لعرض طريقة العرض الخاصة بك؟أي.هل هي نفس بيانات النموذج التي تم تحديثها من المنشور الذي تم تمريره إلى العرض في المرة الثانية التي يتم عرضها فيها؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top