سؤال

أنا أستخدم MVC Contrib Grid لعرض شبكة البيانات الخاصة بي وفرزها وتصفيتها، ولكنني أواجه مشكلات الآن بعد أن تمت ترقيتها لـ MVC3 وRazor.لا تعمل الطريقة المخصصة في مجموعة الأعمدة الخاصة بي مع صفحات aspx، وأصبحت طريقة إجراء الأعمدة قديمة الآن.

أستخدم طريقة إجراء الشبكات لعرض أعمدتي مثل هذا في MVC 2:

 ...
 <% Html.Grid(Model).Columns(column => {
            column.For(x => x.Id);
            column.For(x => x.Name);
            column.For(x => x.Email);
            column.For(x => x.DateOfBirth);
            column.For("View User").Named("Tools").Action(x => { %>
                 <td>
                   <%= Html.ActionLink("View", "View", new { id = p.Id })%>
                   <%= Html.ActionLink("Edit ", "Edit", new { id = p.Id })%>
                   //Snip as there are too many tools :-)
                   //.....
                   <%= Html.ActionLink("Delete", "Delete", new { id = p.Id })%>
                </td>
            <% });
 ...

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

 ...
 <% Html.Grid(Model).Columns(column => {
            column.For(x => x.Id);
            column.For(x => x.Name);
            column.For(x => x.Email);
            column.For(x => x.DateOfBirth);
            //the new custom column 
            column.Custom(Model.ToolsRenderer);
            <% });
 ...

يتم استخدام طريقة نموذج الشبكة أدناه والتي تسمى ToolsRenderer لعرض سلسلة html الخاصة بي.

 public UserManagementViewModel : BaseModel {
   //..snip
   //
     public object ToolsRenderer(Client client)
     {
        List<string> links = new List<string>();

        var editLink = new TagBuilder("a");
        // here is my biggest problem, before  Html.ActionLink used to make
        // sure that I don't have any missing links or help me if i need to 
        // refactor an action / controller name :-(
        editLink.Attributes["href"] = GetEditUserLink(client,   HttpContext.Current.Request.Url.AbsoluteUri);
        editLink.SetInnerText("edit");
        links.Add(editLink.ToString());
        ...
        ...lots of links to be generated here
        ...
        return MvcHtmlString.Create(string.join(" |", links))
        }
   //..snip
}

يعمل هذا في الوقت الحالي، ولكن هل هناك طريقة لجعل صفحة aspx الخاصة بي تعمل مثل طرق العرض الموضحة أدناه؟

@Html.Grid(Model).Columns(column =>
{
  column.For(x => x.Id).
  column.For(x => x.Name);
  column.Custom(@<td><a href='@Html.Actionlink("edit","user",new {id})' alt="@item.email"/><a></td>)

})

أريد أن أقول شيئا مثل:

...     
column.Custom(%><td><a href='<%=Html.Actionlink("edit","user",new {id})%>' alt="<%=item.email%>"/><a></td><%)
...
هل كانت مفيدة؟

المحلول

تمكنت

أخيرا من العثور على عمل حول بعض المساعدة والحفر، وبدلا من استخدام العمود المخصص، استخدم العمود. ثم اضغط على HTML.Partial.شيء مثل الرمز أدناه.

giveacodicetagpre.

نصائح أخرى

يمكن استخدام

for Razor Casehelper في الحقول المخصصة.

على سبيل المثال:

giveacodicetagpre.

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

column.For(c => "custom text").Named("Column Name").SortColumnName("ColumnName");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top