2010-05-10 4 views
0
управления

пользователяasp.net MVC пользовательский элемент управления Проблема

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 

<% 
    using (MvcApplication1.Models.EgovtDataContext _model = new MvcApplication1.Models.EgovtDataContext()) 
    { 
%> 

    <% foreach(var md in MvcApplication1.Models.) { %> 
     <% if (md.ParentId == 0) 
      { %> 

     <% } %> 
    <% } %> 
    <%} %> 

FeatureRepository Класс

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace MvcApplication1.Models 
{ 
    public class FeaturesRepository 
    { 
     EgovtDataContext db = new EgovtDataContext(); 

     public IEnumerable<Feature> GetAllFeatures() 
     { 
      List<Feature> Features = new List<Feature>(); 
      Feature feature = new Feature(); 


      var AllParentFeatures = FeaturesByParentId(0); 
      foreach (Feature frParentCategory in AllParentFeatures) 
      { 
       feature.int_FeatureId = frParentCategory.int_FeatureId; 

       feature.vcr_FeaturesName = frParentCategory.vcr_FeaturesName; 
       feature.int_ParentId = frParentCategory.int_ParentId; 
       Features.Add(feature); 


       var AllChildFeaturesofthatParent = FeaturesByParentId(frParentCategory.int_FeatureId); 
       int AllChildFeaturesofthatParentCount = AllChildFeaturesofthatParent.Count(); 
       foreach (Feature frChildCategory in AllChildFeaturesofthatParent) 
       { 
        feature.int_FeatureId = frParentCategory.int_FeatureId; 

        feature.vcr_FeaturesName = frParentCategory.vcr_FeaturesName; 
        feature.int_ParentId = frParentCategory.int_ParentId; 
        Features.Add(feature); 
       } 

      } 
      return Features; 

     } 

    } 
} 

1) Является ли это правильно сделали публичные IEnumerable GetAllFeatures() в приведенном выше методе? И метод правильно написал? 2) Я хочу вызвать метод GetAllFeatures в элементе управления выше? как бы я это сделал? 3) Пользовательский контроллер должен быть создан в общей папке? Для чего предназначена общая папка?

ответ

5

Создать действие контроллера

public ActionResult All() 
{ 
    return View(new FeaturesRepository().GetAllFeatures()); 
} 

И изменить свой UserControl объявление

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Feature>>" %> 


<% foreach(var md in Model) 
    { %> 
     <% if (md.ParentId == 0) 
      { %> 
       //blabla 
     <% } %> 
<% } %> 
1

Вам необходимо создать экземпляр этого класса репозитория в контроллере и использовать вызов экземпляра методом, возвращающим IList всех функций и доступ к этому Ilist в вашей модели.

+0

контроллеры пользователей должны быть созданы в общей папке? – maztt

+0

Вы можете создать контроллер в папке контроллера – Pinu

1

Вышеуказанный метод выглядит отлично, хотя я не знаю специфических особенностей вашего бизнеса. Просто некоторые изменения синтаксиса кода были бы хорошими (например, с функциями с капиталом F, неправильным корпусом) и т. Д.

Что касается вызова, вы не можете просто вызвать вышеупомянутый метод из элемента управления View или View User. Перед визуализацией представления необходимо заполнить ViewData или Model данными из этого метода. Альтернативой будет использование JavaScript, в частности, JSON-вызовы для запроса данных из действия, которое возвращает JsonResult или ContentResult или что-то подобное.

Действия контроллера должны типично возвращать ActionResult или тип, наследуемый от него (ContentResult, JsonResult, RedirectToActionResult и т. Д.).

Смежные вопросы