Как system.web.mvc.mvchtmlstring преобразовать в System.IConvertible в DropDownList? - PullRequest
0 голосов
/ 14 июня 2019

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 голосов
/ 14 июня 2019

Заменить

@{
    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 возвращает MvcHtmlString, который представляет html. Это не то, что вам нужно здесь. Для SelectListItem.Text вам нужно только string значение item.Text. То же самое для SelectListItem.Value. Исключение выдается на Convert.ToBoolean(Html.DisplayFor(modelItem => item.Selected)). ToBoolean метод пытается преобразовать заданную MvcHtmlString, и, поскольку метод не соответствует ожидаемому методу, и он не реализует IConvertible, он вызывает исключение.

Ваш div пуст, поскольку Html.DropDownList("idTipoCaso", listItems, "Nombre"); возвращает MvcHtmlString в никуда. Вы должны поместить его вне блока @ {...}, прямо в html.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...