2012-02-28 61 views
0

こんにちは、Ajax呼び出し

後、私はブールが含まれている.NETクラスを持つBOOLするブール値を翻訳し、このクラスは、AJAXを使用してクライアントに送信されます。問題は、私がちょうど使用した場合:

if(MyClass.CheckedValue) 

CheckedValueがfalseであっても、常にtrueになります。私は代わりにオブジェクトが設定されているかどうかをチェックし、そうであればそれが真であると主張しますか?私はAJAXの後にjavascriptに戻ったときに、このブール代理人がどのようなタイプを取得するのか確認します。

また、私は、この試みている:

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

if (checked) 

をしかし、これはまた真であるlawaysでしょうか?

これはどのように処理しますか?

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:

これは、クライアントがどのように見えるかです(exaclyではなく近くにあります。 cated)

$.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); 
    } 
} 
+2

ブール値が本当に偽である場合、「MyClass.CheckedValue」は常にtrueに評価されますか? –

+0

クライアント側で 'MyClass'がどのように作成されたのか投稿してください。 JSONから解析された場合は、JSONも投稿してください。 'MyClass.CheckedValue'(' console.log(MyClass.CheckedValue) ')の正確な値は何ですか? –

+0

@James:それが 'ブール'のインスタンス(すなわち 'ブール'ではない)の場合、それはオブジェクトであり、オブジェクトは常に真と評価されます。 –

答えて

0

申し訳ありませんが、問題は、クライアント側で括弧が欠落していたことでした。

if (data.CheckedValue){ 
}