Перевести логическое значение в bool после вызова Ajax - PullRequest
0 голосов
/ 28 февраля 2012

Привет,

У меня есть класс .net, который содержит логическое значение, этот класс отправляется клиенту с AJAX.Проблема в том, что если я просто использую:

if(MyClass.CheckedValue)

Это всегда будет верно, даже если CheckedValue имеет значение false.Я полагаю, что вместо этого он проверяет, установлен ли объект, и если так, то это правда?Имейте в виду, что тип этого булева свойства появляется при возвращении в javascript после AJAX?

Я также пробовал это:

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 голосов
/ 28 февраля 2012

Извините, проблема была в том, что скобки отсутствовали на стороне клиента.

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