VERIFICAR SE CÓDIGO J? EXISTE

PERCIFILHO 05/12/2016 13:59:57
#469423
Boa tarde, amigos!
Estou procurando uma forma de fazer com que ao usuário digitar um código de produto, quando o cursor sair do campo, seja verificado na tabela de dados; se o código existir emite uma mensagem de que o código já está cadastrado. Procurei na internet mas ainda não encontrei como se faz.
Aqui a parte da View que recebe o campo código:
@using (Html.BeginForm())
{
@Html.ValidationSummary()
@Html.Label([Ô]Código[Ô], htmlAttributes: new { @class = [Ô]rotulo[Ô] })
<br />
@Html.TextBoxFor(model => model.Codigo, new { style = [Ô]width:120px;[Ô], @class = [Ô]dados[Ô], @maxlength = [Ô]20[Ô] })
@Html.ValidationMessageFor(model => model.Codigo, [Ô][Ô], new { @class = [Ô]text-danger[Ô] })
}

JABA 05/12/2016 16:22:31
#469427
Resposta escolhida
stackoverflow.com/questions/26628785/asp-net-mvc-4-5-onblur-event-textbox

Ex:
@Html.EditorFor(model => model.id)

$(function () {
$([ô]#id[ô]).blur(function () {
// código aqui
});
});


O princípio é o mesmo que do exemplo do combobox que te passei uma vez. Vai ter que usar Javascript ou Jquery.
PERCIFILHO 07/12/2016 16:11:35
#469484
Boa tarde, Jaba.
Se eu conseguir fazer a consulta dessa maneira:

Na View:
            @using (Html.BeginForm([Ô]BuscaItemFornecedor[Ô], [Ô]ItensFornecedor[Ô]))
{
@Html.Label([Ô]Código[Ô], htmlAttributes: new { @class = [Ô]rotulo[Ô] })
<br />
@Html.TextBoxFor(model => model.Codigo, new { style = [Ô]width:120px;[Ô], @class = [Ô]dados[Ô], @maxlength = [Ô]30[Ô], @id = [Ô]CodigoItemFornecedor[Ô] })
@Html.ValidationMessageFor(model => model.Codigo, [Ô][Ô], new { @class = [Ô]text-danger[Ô] })

<button type=[Ô]submit[Ô]
style=[Ô]border-style:none; background-color:transparent; position:absolute; float:right; padding-bottom:5px;[Ô]>
<img alt=[Ô]Consulta[Ô] title=[Ô]Consulta[Ô] src=[Ô]~/Content/pesquisar.png[Ô]>
</button>
<input id=[Ô]message[Ô] type=[Ô]text[Ô] style=[Ô]position:absolute; float:right;[Ô] />
}


Na Controller:
        public JsonResult BuscaItemFornecedor(string codigo = [Ô][Ô])
{
var query = db.ItemFornecedor.Where(x => x.Codigo == codigo).ToList();
if (query.Count != 0)
{
foreach (var item in query)
{
ViewBag.descricao = item.Descricao;
}
}
return Json(ViewBag.descricao);
}


Já vi que a ViewBag.descricao retorna a descricao do produto (que é o que eu preciso), agora, como faço para mostrar essa descrição na text [Ô]message[Ô]?
JABA 07/12/2016 23:15:00
#469505

Para usar a ViewBag é só chamá-la na view da forma com que ela foi declarada. Ex:

@Html.TextBoxFor(model => [txt-color=#e80000]ViewBag.descricao[/txt-color], new { style = [Ô]width:120px;[Ô], @class = [Ô]dados[Ô], @maxlength = [Ô]30[Ô], @id = [Ô]CodigoItemFornecedor[Ô] })
PERCIFILHO 08/12/2016 10:35:43
#469513
Acontece, que quando retorna da JsonResult, para a View, é exibido o resultado do Json em uma nova página, e na verdade eu gostaria que fosse mostrado nesta minha TextBox ou numa Label, tanto faz, só não sei como fazer para utilizar esse resultado do Json (que no caso é a descrição) para mostrar onde eu quiser.

Dessa forma que você mencionou para utilizar a ViewBag, não funcionou, aparece a mensagem: An expression tree may not contain a dynamic operation
JABA 08/12/2016 14:13:02
#469518
Coloque isso no controller do objeto que está querendo a ID. O Json serve para pegar somente dados, nada de html.
public JsonResult ObterID(int codigo)
{
// aqui você faz uma consulta no banco para pegar a id
var id = SuaConsulta.GetId(codigo);

//Retorna o valor em JSON
return Json(id, JsonRequestBehavior.AllowGet);
}


<script type=[Ô]text/javascript[Ô]>

// Aqui ele verifica se toda a página já foi carregada. As vezes um página é muito grande e nem todos os controles são carregados no mesmo momento, daí o controle que você pode estar querendo pode não estar carregado, e senão estiver, o código não funcionará, pois para o browser o controle que você quer ainda não existe.
$(document).ready(function () {

// O IdItem abaixo é a id que você deu para o controle na view. O blur é o evento que controla a perda do foco.
$([ô]#IdItem[ô]).blur(function () {

//Pega o valor do controle que está com o foco
var id = $(this).val();

// Aqui ele vai executar a função acima no servidor, se tiver alguma coisa, eles ficarão disponíveis na variável [Ô]dados[Ô] para serem usados no browser.
$.getJSON([ô]/AquiVaiARotaDoControllerParaAfuncaoAcimaObterID[ô], { codigo: id }, function (dados) {

// Se retornou algum dado é porque o id existe, senão viria vazio.
if (dados.length == 0) {
// Emite um alerta dizendo que o id não existe
alert([Ô]Id inexistente[Ô]);
}
});
});
});
</script>
Tópico encerrado , respostas não são mais permitidas