En renvoyant une valeur de Kendo dans la liste déroulante

Résolu: je me suis contenté de modifier les propriétés de datatextfield et la DataValueField à la fois "Type" et de cette façon, quand je suis rentré .val (), il m'a donné exactement le même champ que le texte.


Je suis en train de renvoyer une valeur à mon Contrôleur de la vue à partir d'un Kendo dans la liste déroulante de l'index sélectionné à l'aide de script.
Jusqu'à présent, je ne peut le faire retourner la valeur de l'indice et pas le texte.

Problème côté: Aussi distinctes ne fonctionne pas dans le contexte actuel, si je supprime le .DataValueField de la vue ainsi que de prendre de l'ID de Produit à partir de mon DTO et Contrôleur je peux obtenir les valeurs distinctes de juste le .Propriétés De Datatextfield("Type").

Problème principal: est que nom: $("#typeDropDownList").val() est seulement saisissant la référence du produit (comme il se doit) et si j'essaie de le faire saisir par .texte() à la place il me donne un "" (chaîne vide) comme un résultat à chaque fois. Je me demande comment je peux prendre juste la valeur de texte de la liste déroulante.

Elle sera mise à jour d'un Kendo Grille.

Je suis assez nouveau dans la programmation et je suis en stage, allez facile sur moi s'il vous plaît.

Voici mon point de Vue

<h2>Products</h2>
@(Html.Kendo().DropDownList()
.Name("typeDropDownList")
.HtmlAttributes(new { style = "width: 250px" })
.DataTextField("Type")
.DataValueField("ProductID")
.DataSource(source => 
{ 
source.Read(read => 
{ 
read.Action("GetList", "AdvSlider")
.Data("refresh"); 
})
.ServerFiltering(true); 
}) 
.OptionLabel("Select a type")        
.Events(e => e.Change(
@<text>
function(e){
$("#grid").data("kendoGrid").dataSource.read();
}</text>
))
)
@(Html.Kendo().Grid<SKLiqPOC.Models.PatDTO>()
.Name("grid")
.DataSource(dataSource => dataSource //Configure the grid data source
.Ajax() //Specify that ajax binding is used
.ServerOperation(false)          
.Read(read => read.Action("GetJson", "AdvSlider")
.Data("refresh"))
//Set the action method which will return the data in JSON format
.PageSize(20)          
)
.Columns(columns => {
//columns.Bound("Name");
columns.Bound(a => a.ProductID).Filterable(false).Width(100);
columns.Bound(a => a.Description);
columns.Bound(a => a.ProductName).Width(160);
columns.Bound(a => a.Manufacturer).Width(160);
columns.Bound(a => a.Price).Format("{0:C}").Width(130);
})
.Pageable() //Enable paging
.Sortable() //Enable sorting
.Filterable() //Enable filtering
.Scrollable()
.HtmlAttributes(new { style = "height:430px;" })
)  
<script>
function refresh()
{        
return {
name: $("#typeDropDownList").val()
};
};
</script>

Voici mon contrôleur

namespace SKLiqPOC.Controllers
{
public class AdvSliderController : Controller
{
private SKLIQContext db = new SKLIQContext();
public ActionResult Index()
{
return View();
}
public ActionResult GetList()
{
IQueryable<ddlDTO> dtoQuery = (
from name in db.t_prdct_fmly
join product in db.t_prdct on name.prdct_fmly_sys_key_id equals product.prdct_fmly_sys_key_id
join nameCat in db.t_prdct_fmly_ctgy on name.prdct_fmly_sys_key_id equals nameCat.prdct_fmly_sys_key_id
join type in db.t_prdct_ctgy on nameCat.prdct_ctgy_sys_key_id equals type.prdct_ctgy_sys_key_id
where !product.excl_fr_srch
select new ddlDTO
{
Type = type.shrt_descr,
ProductID = product.prdct_fmly_sys_key_id                             
}).Distinct();
return Json(dtoQuery, JsonRequestBehavior.AllowGet);
}
public ActionResult GetJson([DataSourceRequest]DataSourceRequest request, string name)
{
IEnumerable<PatDTO> dtoQuery = GetItems(name);
if (dtoQuery.Count() <= 0) //If no items are found add a message in the grid stating such
dtoQuery = new PatDTO[1] { new PatDTO { ProductName = "No Items Found" } };
DataSourceResult result = dtoQuery.ToDataSourceResult(request);
return Json(result, JsonRequestBehavior.AllowGet);
}
public IQueryable<PatDTO> GetItems(string query)
{
IQueryable<PatDTO> dtoQuery =
from product in db.t_prdct
join name in db.t_prdct_fmly on product.prdct_fmly_sys_key_id equals name.prdct_fmly_sys_key_id
join type in db.t_prdct_ctgy on product.prdct_typ_cd equals type.prdct_ctgy_sys_key_id
join country in db.t_cntry_orig on product.cntry_orig_cd equals country.cntry_orig_sys_key_id
join region in db.t_regn_orig on product.regn_orig_cd equals region.regn_orig_sys_key_id
where !product.excl_fr_srch
&& type.shrt_descr.ToLower().Contains(query.ToLower())
select new PatDTO
{
ProductID = product.prdct_fmly_sys_key_id,
Price = product.retl_price,
ProductName = product.t_prdct_fmly.prdct_fmly_nm,
Manufacturer = name.mnfct_nm,
Description = name.mrkt_nrtv
};
return dtoQuery; 
}
}
}

et aussi mon DTO

namespace SKLiqPOC.Models
{   
public class ddlDTO
{         
public string Type { get; set; }
public int ProductID { get; set; }
}
}
Fin edit : on dirait que vous trouvé la solution sur votre propre. Propriétés de datatextfield est utilisée comme la valeur affichée dans la liste déroulante, et DataValueField est utilisée comme ce que l'entrée de capture comme valeur finale. I. e. si vous avez une liste de téléphone, les codes, vous pouvez afficher "+61 Australie" avec des propriétés de datatextfield mais qu'il ne capture que la valeur "61"

OriginalL'auteur user2441005 | 2013-06-13