在Ajax调用之后将boolean转换为bool

时间:2012-02-28 18:06:16

标签: javascript jquery .net ajax

您好,

我有一个包含布尔值的.net类,这个类通过AJAX发送到客户端。问题是,如果我只是使用:

if(MyClass.CheckedValue)

即使CheckedValue为false,也始终如此。我认为它是检查对象是否设置,如果是,它是真的吗?我注意到在AJAX之后返回javascript时这个布尔属性会得到什么类型?

我也试过这个:

var checked;
checked = Boolean(this.CheckedValue === 'true');

if (checked)

但这也会是真的吗?

我该如何处理?

Edit1:

发送给客户的类:

/// <summary>
/// Are set to client with Ajax to render a correct view of the
/// current category and filter settings
/// </summary>
public class GetCategoriesAndFiltersAjax
{

    public GetCategoriesAndFiltersAjax()
    {
        Filters = new Filter();
    }

    public SelectList categoryList { get; set; }
    public Filter Filters { get; set; }

    public class Filter
    {
        public Filter()
        {
            DefaultFilters = new List<CategoryItemFilter>();
            FilterList = new List<CategoryItemFilter>();
        }

        /// <summary>
        /// Filters like buy, sell, let and so on
        /// </summary>
        public List<CategoryItemFilter> DefaultFilters { get; set; }
        /// <summary>
        /// All other filters that a category might be bound to
        /// </summary>
        public List<CategoryItemFilter> FilterList { get; set; }
    }
}


public class CategoryItemFilter
{
    private int _filterId = -1;

    private string _clientElementId1;
    private string _clientElementId2;

    public FilterControlType FilterControlType { get; set; }
    public string Title1 { get; set; }
    public string Title2 { get; set; }
    public string ClientElementId1
    {
        get { return _clientElementId1; }
        set
        {
            _clientElementId1 = value;
        }
    }
    public string ClientElementId2
    {
        get { return _clientElementId2; }
        set
        {
            _clientElementId2 = value;
        }
    }
    /// <summary>
    /// Keep track of whitch filter it is
    /// </summary>
    public int FilterId
    {
        get { return _filterId; }
        set { _filterId = value; }
    }

    #region Values
    public Boolean CheckedValue { get; set; }
    public string TextValue { get; set; }

    public SelectList DropDownList1 { get; set; }
    public SelectList DropDownList2 { get; set; }
    #endregion

    public PublicAdFilterKey PublicAdFilterKey { get; set; }
}

这就是AJAX方法在服务器上的样子:

public JsonResult GetCategoriesByParent(int id, Boolean editMode)
{
    FilterModel filterModel = new FilterModel();
    CategoryModel categoryModel = new CategoryModel();
    List<ModelViewCategory> mvCategoryList = new List<ModelViewCategory>();
    //List<AdCategory> categoryList;
    FilterHandler filterHandler = new FilterHandler();

    GetCategoriesAndFiltersAjax value = new GetCategoriesAndFiltersAjax();
    try
    {

        value.categoryList = new SelectList(categoryModel.GetCategoriesByParent(id).ToArray(), "Id", "Name");

        if (editMode)
            value.Filters = filterHandler.ConvertFilterModelToAjaxCategoryFilter(filterModel.GetCategoryFilterByCategory(id), Biss.Views.ViewClasses.Filter.FilterType.Edit);
        else
            value.Filters = filterHandler.ConvertFilterModelToAjaxCategoryFilter(filterModel.GetCategoryFilterByCategory(id), Biss.Views.ViewClasses.Filter.FilterType.Display);

        return this.Json(value, JsonRequestBehavior.AllowGet);
    }
    catch (Exception ex)
    {
        throw;
    }
}

编辑2:

这就是客户端的样子(不是很冒险,但很接近,它更复杂)

$.ajax({
                            url: actionPath,
                            type: 'POST',
                            dataType: 'json',
                            data: ((typeof config.postData == "function") ? config.postData() : config.postData) || { id: $(source).val(), editMode: _filterInEditMode },
                            success: function (data) {
                                methods.reset();
                                $.each(data.categoryList, function () {
                                    SetFilterSubEdit(data.DefaultFilters);
                            },
                            error: function () {
                                methods.showError();
                            }
                        });


function SetFilterSubEdit(data) {
    $.each(data, function () {
       if (data.CheckedValue)
                    $("#" + visibleElements[0]).attr('checked', checked);
    }
}

1 个答案:

答案 0 :(得分:0)

很抱歉,问题是客户端缺少方括号。

if (data.CheckedValue){
}