معرف العميل للخاصية (ASP.NET MVC)
-
28-09-2019 - |
سؤال
أنا متزوج في 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()
الطرق تولد. عادةً ما يقومون بإنشاء مربع نص مع سمات "المعرف" و "الاسم" على حد سواء تم تعيينهما على اسم الخاصية.