سؤال

أنا متزوج في ASP.NET MVC ، ولدي أدنى شك:

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

<label for="<%=x.Name.ClientId%>"> Name: </label>
<%=Html.TextBoxFor(x=>x.Name) %>

ما الحاجة التي أضعها في "ClientId" للتأكد من تقديم المعرف الصحيح إلى عنصر التحكم المقابل؟

شكرًا

هتافات

هل كانت مفيدة؟

المحلول

ضع هذا الرمز في مكان ما:

using System; 
using System.Linq.Expressions; 
using System.Web.Mvc; 

namespace MvcLibrary.Extensions 
{ 
    public static class HtmlExtensions 
    { 
        public static MvcHtmlString FieldIdFor<TModel, TValue>(this HtmlHelper<TModel> html,
            Expression<Func<TModel, TValue>> expression) 
        { 
            string htmlFieldName = ExpressionHelper.GetExpressionText(expression); 
            string inputFieldId = html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName); 
            return MvcHtmlString.Create(inputFieldId); 
        } 
    } 
}

ثم في عرض ASPX الخاص بك:

<label for="<%= Html.FieldIdFor(m => m.EmailAddress) %>">E-mail address:</label> 
<%= Html.TextBoxFor(m => m.EmailAddress) %>

يمكنك أيضًا استخدام هذا في مكالمات JavaScript لأنك لن تعرف معرف التحكم مقدمًا وقد تحتاجه لبعض رمز JavaScript للعمل ضدها:

<script> $.CoolJQueryFunction('<%= Html.FieldIdFor(m => m.EmailAddress) %>'); </script>

طريقة HTML HELPER LABELLFOR ، التي ذكرها شخص ما هنا ، لن تسمح لك بتحديد الملصق النصي الفعلي الذي تريد استخدامه ، يجب عليك تزيين عارضات العرض الخاصة بك بسمات لتعيين نص التسمية ، مع IMHO قبيح. أفضل أن تظهر الأشياء في جزء عرض ASPX الفعلي نفسه ، وليس في نموذج المجال/العرض. بعض الناس سوف يختلفون معي رغم ذلك.

لست متأكدًا من قواعد نشر الروابط إلى منشورات المدونة الخاصة به ، لكنني نشرت مدونة حول هذا الموضوع الدقيق: http://www.dominicpettifer.co.uk/blog/37/strongly-typed--label-Elements-app-net-mvc-2

نصائح أخرى

MVC 4 لديه هذا بنيت الآن .. انظر هذه

ممتع ما يمكن العثور عليه في رمز المصدر المجاني لـ MVC. ها هو الجواب:

@html.idfor أو@html.namefor

إذن ما هو الفرق؟ ها هو الصيد:

لن يحل اسم اسم ". إلى "_".

إذا كنت تريد أي مثال ، لقد وجدت هذه المقالة الصغيرة الرائعة

كما قيل ، لا داعي للقلق بشأن ClientId ، فريد من نوعه في ASP.NET MVC لأن تلك هي تجريدات WebForms. يمكنك ببساطة كتابة الهوية التي تريدها. هناك أيضًا طريقة تمديد لهذا:

<%= Html.LabelFor(x => x.Name) %>

استخدم ما يلي:

Model.Name

يمكنك ببساطة القيام بـ "عرض مصدر" أو فحص مربع النص المقدم مع شيء مثل Firebug لمعرفة ما Html.xyzFor() الطرق تولد. عادةً ما يقومون بإنشاء مربع نص مع سمات "المعرف" و "الاسم" على حد سواء تم تعيينهما على اسم الخاصية.

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