1
I’m trying a filter with Razor, search in the same text field, 2 information, you can type CNPJ or wallet, when I load the requests page, already loads with the data of CNPJ and Wallet on the screen, but I have a search button that when you type one of the two, for example CNPJ, the field Wallet comes empty, I managed to do this in Controller, but I would like to do it right in HTML Razor, let’s see the following rules:
Partialfiltro.cshtml
@model DPE.Programa.Dados.Models.tb_solicitacao
<div class="form-group col-md-2 ">
<span>Cnpj/Carteira:<br>
</span>
@if (String.IsNullOrEmpty(Model.cnpj))
{
<input type="text" class="form-control" value="@Model.carteira" id="carteira" name="carteira" aria-expanded="true" />
}
else
{
<input type="text" class="form-control" value="@Model.cnpj" id="cnpj" name="cnpj" aria-expanded="true" />
}
@*<input type="text" class="form-control" value=" @if (String.IsNullOrEmpty(Model.cnpj)) { @Model.carteira } else { @Model.cnpj } " id="carteira" name="carteira" aria-expanded="true" />*@
</div>
<button class="pull-right btn btn-primary btn-labeled fa fa-search" type="button" id="btn-pesquisar">Pesquisar</button>
We can see that in what I did will always load data from the Wallet which is a number like 128272, there brings in the result.
Now the controller where he has commented that I was able to search for CNPJ when typing in the field, picked by the size of it.
public ActionResult FiltroPesquisa(tb_solicitacao filtros, int? pagina)
{
try
{
return PartialView("PartialResultadoPesquisa", ListarDados(filtros, pagina));
}
catch (Exception ex)
{
ExibirMensagem("Ocorreu um erro ao tentar executar o filtro.<br/>Erro: " + ex.Message, ETipoMensagem.Erro, 99);
return PartialView("_ControleMensagem");
}
}
public List<tb_solicitacao> ListarDados(tb_solicitacao filtros, int? pagina)
{
_paginacao.PageNumber = pagina ?? 1;
_paginacao.RowspPage = 10;
using (DB_ConsultaDomicilioContext context = new DB_ConsultaDomicilioContext())
{
var model = context.tb_solicitacao.Include("tb_credenciamento_solicitacao").Include("tb_faturamento_solicitacao").Include("tb_faturamento_flex_solicitacao").AsQueryable();
//var auxCarteira = String.Empty;
//FILTROS
if (!String.IsNullOrEmpty(filtros.cnpj))
model = model.Where(f => f.cnpj.ToUpper().Trim().Contains(filtros.cnpj.ToUpper().Trim()));
//if (filtros.cnpj.Length < 9)
//{
// auxCarteira = filtros.cnpj;
// filtros.carteira = auxCarteira;
// filtros.cnpj = "";
if (!String.IsNullOrEmpty(filtros.carteira))
model = model.Where(f => f.carteira.ToUpper().Trim().Contains(filtros.carteira.ToUpper().Trim()));
//}
if (!String.IsNullOrEmpty(filtros.email_solicitante))
model = model.Where(f => f.email_solicitante.ToUpper().Trim().Contains(filtros.email_solicitante.ToUpper().Trim()));
if (filtros.data_email != DateTime.MinValue && filtros.data_email != null)
model = model.Where(f => f.data_email.ToShortDateString() == filtros.data_email.ToShortDateString());
if (filtros.data_cadastro != DateTime.MinValue && filtros.data_email != null)
model = model.Where(f => f.data_cadastro.ToShortDateString() == filtros.data_cadastro.ToShortDateString());
//Filtro Status
if (filtros.id_status != 0)
model = model.Where(f => f.id_status == filtros.id_status);
model = model.OrderByDescending(f => f.data_cadastro).AsQueryable();
_paginacao.TotalRegistros = model.Count();
_listDados = model.Skip(_paginacao.PageNumber * _paginacao.RowspPage - _paginacao.RowspPage).Take(_paginacao.RowspPage).ToList();
ViewBag.PaginacaoManual = _paginacao;
return _listDados;
}
}
And finally the screen I modified to show the data when it is CNPJ or Wallet or shows loading everything.
<div class="table-responsive">
@{
if (Model != null && Model.Count > 0)
{
<table class="table table-striped table-hover table-vcenter">
<thead>
<tr>
<th class="text-center">#</th>
<th class="text-center">CNPJ</th>
<th class="text-center">Carteira</th>
<th class="text-center">Email</th>
<th class="text-center">Data Email</th>
<th class="text-center">Data Entrada</th>
<th class="text-center">Status</th>
<th class="text-center">Resposta</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
var Status = Utilitario.EnumDescription((Itau.DPE.ConsultaDomicilio.Dados.Enumeradores.EStatusSolicitacao)item.id_status);
var auxCnpj = item.cnpj;
var auxCarteira = item.carteira;
<tr>
<td class="text-center">@item.id_solicitacao</td>
@if (auxCnpj != "")
{
<td class="text-center">@item.cnpj</td>
<td class="text-center"></td>
}
else if (auxCarteira != null)
{
<td class="text-center"></td>
<td class="text-center">@item.carteira</td>
}
else
{
<td class="text-center">@item.cnpj</td>
<td class="text-center">@item.carteira</td>
}
<td class="text-center icon-email-solicitacao" data-details="@Html.Raw(item.mensagem_email.Replace("nbsp", "<br />"))" title="Detalhe" style="text-decoration:underline; cursor:pointer">
@item.email_solicitante</td>
<td class="text-center">@item.data_email</td>
<td class="text-center">@item.data_cadastro</td>
<td class="text-center">@Status</td>
<td class="text-center">
@if (Status == "Respondida")
{
<a href="#" class="icon-detalhe-solicitacao" id="@item.id_solicitacao">
<span class="fa fa-search"></span>
</a>
}
</td>
</tr>
}
</tbody>
</table>
Html.RenderPartial("_Paginacao");
}
else
{
<table class="table table-striped">
<tr class="text-center">
<th class="text-center">Não houve resultados para a pesquisa. </th>
</tr>
</table>
}
}
</div>
Main focus is on the first screen, I’m trying to figure out a way to be able to search for any of the two, but just by wallet I got, someone has done this type of search or has any idea what I could change to work on ASP.NET, thanks guys.
I had difficulty understanding the expected behavior of the application. Could explain better what is not working properly or what exactly you want to improve?
– Keven Carneiro