Meu código controlador de ação parece amadora

votos
0

tempo primeiro post,

Eu fui brincar com MVC abit ... Eu tenho uma visão que tem vários campos de entrada, alguns desses campos podem estar em branco no post.

O método de ação dentro do controlador para o cargo é algo como isto

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)

Eu tenho usado a extensão DynamicQuery que foi retroceder ao redor, a fim de realizar querys Linq dinâmicas no meu banco de dados e eu encapsulado isso em um objeto de pesquisa que é passado para a camada de acesso a dados para execusion.

No entanto, eu também tenho um objeto ViewData personalizado que é passado de volta para o ponto de vista para exibir os valores de entrada e os resultados da consulta.

Tudo parece um pouco desagradável no código como eu estou tendo para definir as propriedades Pesquisa objeto eo ViewDatas.

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)  { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View(Search, memberViewData); 

}

Estou pensando sobre isso e realmente deve apenas passar os valores para a camada de acesso a dados e preencher o ViewData no controlador, ou há um padrão muito mais elegante ou prática que eu poderia usar?

Desculpe se isso parece despejo, não colocar de pessoas para trocar idéias e tempo para cavar o quadro.

Publicado 19/05/2009 em 20:23
fonte usuário
Em outras línguas...                            


3 respostas

votos
2

Use ModelBinder para ligar dados

Respondeu 19/05/2009 em 20:33
fonte usuário

votos
1

De acordo com o snippet de classe MemberViewData tem a propriedade Os resultados, além de propriedades de classe Search. Então, primeiro passo seria fazer MemberViewData derivam de Pesquisa e definir um construtor que aceita instância de pesquisa como parâmetro e atribui suas propriedades básicas a partir dele. Em seguida gostaria de alterar o método de ação como assim:

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}
Respondeu 19/05/2009 em 20:41
fonte usuário

votos
0

Como Tadeusz mencionado, uma ModelBinder pode ajudar a construir o MemberViewData para você, o que deixaria apenas os resultados sejam obtidos.

Você também pode decidir sobre a criação de um serviço de apresentação que entende como construir este objeto de exibição de dados e simplesmente delegar a ele. Eu prefiro a abordagem de modelo de pasta aqui embora.

Respondeu 19/05/2009 em 20:38
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more