如何在DropDownList中将system.web.mvc.mvchtmlstring转换为System.IConvertible?

时间:2019-06-14 15:01:05

标签: c# asp.net visual-studio class model-view-controller

  

System.InvalidCastException:'您不能转换对象类型   将“ System.Web.Mvc.MvcHtmlString”转换为“ System.IConvertible”。

该消息显示当我尝试运行代码时,请帮助

我的局部视图

@model IEnumerable<SistemaDeAdminCasosJuridicos_Presentacion.Models.TipoCaso>

<div class="row">
    <div class="input-field col s12" id="cbo">
        <label>Seleccionar tipo de Caso</label>
        @{
            List<SelectListItem> listItems = new List<SelectListItem>();
            foreach (var item in Model)
            {
                listItems.Add(new SelectListItem
                {
                    Text = @Html.DisplayFor(modelItem => item.Text).ToString(),
                    Value = @Html.DisplayFor(modelItem => item.Value).ToString(),
                    Selected = Convert.ToBoolean(Html.DisplayFor(modelItem => item.Selected))
                });
            }
            Html.DropDownList("idTipoCaso", listItems, "Nombre");
        }
    </div>
</div>

我的jQuery

jQuery(document).ready(function () {
    $(document).on('change', '#cbo', function () {
        var idTipoCaso = $(this).val();
        alert(idTipoCaso);
        $.ajax({
            url: "/Parametros/Tareas",
            cache: false
        }).done(function () {
            $("#divtareas").append('@Html.Partial("../Parametros/Tareas", Model.'+idTipoCaso+')');
        });
    });
});

我的控制器

    // GET: Parametros/Tareas
    public ActionResult Tareas(int idTipoCaso)
    {            
        return View(Data.Data.ObtenerListaTareas(idTipoCaso));
    }
    // GET: Parametros/TipoCasos
    public ActionResult TipoCasos()
    {
        return View(Data.Data.ObtenerListaTipoCasos());
    }

1 个答案:

答案 0 :(得分:0)

替换

@{
    List<SelectListItem> listItems = new List<SelectListItem>();
    foreach (var item in Model)
    {
        listItems.Add(new SelectListItem
        {
            Text = @Html.DisplayFor(modelItem => item.Text).ToString(),
            Value = @Html.DisplayFor(modelItem => item.Value).ToString(),
            Selected = Convert.ToBoolean(Html.DisplayFor(modelItem => item.Selected))
        });
    }
    Html.DropDownList("idTipoCaso", listItems, "Nombre");
}

具有:

@{
    List<SelectListItem> listItems = new List<SelectListItem>();
    foreach (var item in Model)
    {
        listItems.Add(new SelectListItem
        {
            Text = item.Text,
            Value = item.Value,
            Selected = item.Selected
        });
    }
}
@Html.DropDownList("idTipoCaso", listItems, "Nombre");

@Html.DisplayFor返回代表HTML的MvcHtmlString。这里不是您所需要的。对于SelectListItem.Text,您只需要string的{​​{1}}值。 item.Text也是如此。 SelectListItem.Value引发异常。 Convert.ToBoolean(Html.DisplayFor(modelItem => item.Selected))方法尝试转换给定的ToBoolean,由于它不是该方法所期望的,并且没有实现MvcHtmlString,因此会引发异常。

您的div为空,因为IConvertible返回Html.DropDownList("idTipoCaso", listItems, "Nombre");无处。您必须将其直接放在html之外的@ {...}块之外。