0

キーにintがなく、キーに文字列があるアイテムの配列が入っている投稿があります。例:(投稿から)

-----------------------------3805226668837
Content-Disposition: form-data; name="pool[Abelson_2834.jpg]"

general_pool
-----------------------------3805226668837
Content-Disposition: form-data; name="pool_place[Abelson_2834.jpg]"

1
-----------------------------3805226668837
Content-Disposition: form-data; name="mediatype[Abelson_2834.jpg]"

3
-----------------------------3805226668837
Content-Disposition: form-data; name="pool[Abelson_2852.jpg]"

general_pool
-----------------------------3805226668837
Content-Disposition: form-data; name="pool_place[Abelson_2852.jpg]"

1
-----------------------------3805226668837
Content-Disposition: form-data; name="mediatype[Abelson_2852.jpg]"

3
-----------------------------3805226668837
Content-Disposition: form-data; name="pool[Abelson_3160-1.jpg]"

general_pool
-----------------------------3805226668837
Content-Disposition: form-data; name="pool_place[Abelson_3160-1.jpg]"

1
-----------------------------3805226668837
Content-Disposition: form-data; name="mediatype[Abelson_3160-1.jpg]"

3
-----------------------------3805226668837
Content-Disposition: form-data; name="files[]"; filename="Abelson_2834.jpg"
Content-Type: image/jpeg

したがって、「プール」はキーが名前として設定された配列であり、その値は文字列として設定されます。

基本的にこのような形から

<tbody data-target="#modal-gallery" data-toggle="modal-gallery" class="files">
  <tr class="template-upload fade in">
    <td class="preview"><span class="fade in">
      <canvas width="80" height="54"></canvas>
      </span></td>
    <td class="name"><span>Abelson_2834.jpg</span></td>
    <td class="size"><span>4.17 MB</span></td>
    <td><div aria-valuenow="0" aria-valuemax="100" aria-valuemin="0" role="progressbar" class="progress progress-success progress-striped active">
        <div style="width:0%;" class="bar"></div>
      </div>
      <div="forminputs"> <span style="display:inline-block;float:left;">Choose a pool:
      <select style="display:inline-block;" name="pool[Abelson_2834.jpg]">
        <option selected="selected" value="general_pool">General</option>
        <option value="place">Places</option>
        <option value="geo">Geometrics</option>
        <option value="ads">Advertisment</option>
      </select>
      <span class="pool_place"> <br>
      Choose a pool:
      <select style="display:inline-block;" name="pool_place[Abelson_2834.jpg]">
        <option selected="selected" value="1">place 1</option>
        <option value="2">Places</option>
        <option value="3">Geometrics</option>
        <option value="4">Advertisment</option>
      </select>
      </span> </span> <span style="display:inline-block;float:left;">Choose Media type:
      <select style="display:inline-block;" name="mediatype[Abelson_2834.jpg]">
        <option value="1">marker_icon</option>
        <option value="2">user_image</option>
        <option selected="selected" value="3">general_image</option>
        <option value="4">general_video</option>
        <option value="5">google_static_map</option>
      </select>
      </span> </div="forminputs"></td>
    <td class="start"><button class="btn btn-primary"> <i class="icon-upload icon-white"></i> <span>Start</span> </button></td>
    <td class="cancel"><button class="btn btn-warning"> <i class="icon-ban-circle icon-white"></i> <span>Cancel</span> </button></td>
  </tr>
  <tr class="template-upload fade in">
    <td class="preview"><span class="fade in">
      <canvas width="80" height="54"></canvas>
      </span></td>
    <td class="name"><span>Abelson_2852.jpg</span></td>
    <td class="size"><span>3.17 MB</span></td>
    <td><div aria-valuenow="0" aria-valuemax="100" aria-valuemin="0" role="progressbar" class="progress progress-success progress-striped active">
        <div style="width:0%;" class="bar"></div>
      </div>
      <div="forminputs"> <span style="display:inline-block;float:left;">Choose a pool:
      <select style="display:inline-block;" name="pool[Abelson_2852.jpg]">
        <option selected="selected" value="general_pool">General</option>
        <option value="place">Places</option>
        <option value="geo">Geometrics</option>
        <option value="ads">Advertisment</option>
      </select>
      <span class="pool_place"> <br>
      Choose a pool:
      <select style="display:inline-block;" name="pool_place[Abelson_2852.jpg]">
        <option selected="selected" value="1">place 1</option>
        <option value="2">Places</option>
        <option value="3">Geometrics</option>
        <option value="4">Advertisment</option>
      </select>
      </span> </span> <span style="display:inline-block;float:left;">Choose Media type:
      <select style="display:inline-block;" name="mediatype[Abelson_2852.jpg]">
        <option value="1">marker_icon</option>
        <option value="2">user_image</option>
        <option selected="selected" value="3">general_image</option>
        <option value="4">general_video</option>
        <option value="5">google_static_map</option>
      </select>
      </span> </div="forminputs"></td>
    <td class="start"><button class="btn btn-primary"> <i class="icon-upload icon-white"></i> <span>Start</span> </button></td>
    <td class="cancel"><button class="btn btn-warning"> <i class="icon-ban-circle icon-white"></i> <span>Cancel</span> </button></td>
  </tr>
  <tr class="template-upload fade in">
    <td class="preview"><span class="fade in">
      <canvas width="80" height="54"></canvas>
      </span></td>
    <td class="name"><span>Abelson_3160-1.jpg</span></td>
    <td class="size"><span>3.00 MB</span></td>
    <td><div aria-valuenow="0" aria-valuemax="100" aria-valuemin="0" role="progressbar" class="progress progress-success progress-striped active">
        <div style="width:0%;" class="bar"></div>
      </div>
      <div="forminputs"> <span style="display:inline-block;float:left;">Choose a pool:
      <select style="display:inline-block;" name="pool[Abelson_3160-1.jpg]">
        <option selected="selected" value="general_pool">General</option>
        <option value="place">Places</option>
        <option value="geo">Geometrics</option>
        <option value="ads">Advertisment</option>
      </select>
      <span class="pool_place"> <br>
      Choose a pool:
      <select style="display:inline-block;" name="pool_place[Abelson_3160-1.jpg]">
        <option selected="selected" value="1">place 1</option>
        <option value="2">Places</option>
        <option value="3">Geometrics</option>
        <option value="4">Advertisment</option>
      </select>
      </span> </span> <span style="display:inline-block;float:left;">Choose Media type:
      <select style="display:inline-block;" name="mediatype[Abelson_3160-1.jpg]">
        <option value="1">marker_icon</option>
        <option value="2">user_image</option>
        <option selected="selected" value="3">general_image</option>
        <option value="4">general_video</option>
        <option value="5">google_static_map</option>
      </select>
      </span> </div="forminputs"></td>
    <td class="start"><button class="btn btn-primary"> <i class="icon-upload icon-white"></i> <span>Start</span> </button></td>
    <td class="cancel"><button class="btn btn-warning"> <i class="icon-ban-circle icon-white"></i> <span>Cancel</span> </button></td>
  </tr>
</tbody>

情報を引き出すためにいくつかの方法を試しましたが、要するに、キーが何であるかを知ることができなければならないので、それをテストして値を得ていることがわかります. 私は投稿データに選択肢がありません。それはそのままです。.ToDictionary のようなものは使用できません。.net 2.0 で立ち往生しているからです。

これは、KeyValuePair だけで正しい情報を取得しようとする試みです。はい、それは間違っていますが、少なくとも、何が必要なのかについてのアイデアが得られることを願っています。

media.file_name = "Abelson_2834.jpg"; // test value to pin to
int type = 3;
// NOTE I KNOW KeyValuePair IS NOT RIGHT.. looking for right way thou
foreach (KeyValuePair<string, string> obj in Request.Params["mediatype"])
{
    if( obj.Key == media.file_name ){
        type =  int.Parse(obj.Value); 
        // value of type should be 3 since there is a 
        // Request.Params["mediatype"]["Abelson_2834.jpg"] but since you can't call keys
        // by name it thnk it should be an int
        // like Request.Params["mediatype"][0]
    }
}

media.type = ActiveRecordBase<media_types>.Find(type);
ActiveRecordMediator<media_repo>.Save(media);

誰でもこれを機能させる方法について考えがありますか? String[] を Dictionary または Hashtable に変換するのがコツだと思いますが、まだ機能していません。

お手伝いありがとう。乾杯、jeremyBass

サイドノート これがphpだったら、私は行かなければならないでしょう

$value = $_POST["mediatype"]["Abelson_2834.jpg"];

そして、それで問題が解決するのであれば、必要な価値があります。

4

2 に答える 2

0

入力はあなたを誤解させています。あなたは実際にプロパティ[オブジェクト] =値を取得しています。Key = some_function(object,property), Value=value で KVP を作成すると、正しい方向に向かいます。たとえば、上記のコードの 1 回限りの例として:

 if (!String.IsNullOrEmpty(Request.Params["mediatype"])){
        foreach (KeyValuePair<string, string> obj in Request.Params["mediatype"])
        {
           dict_props[obj.Key+"_mediatype"]=value;
           // add each object to a list
        }
 }
 // for each object in the list
 //    for each property
 ...process dictionary....
于 2012-06-01T14:46:14.640 に答える
0

解決策はこれです

media.file_name = "Abelson_2834.jpg";
int type = 3;
int tmp = int.Parse(Request.Params["mediatype[" + media.file_name+ "]"]);
if(tmp>0){
    type = tmp;
}

つまり、C# .net 2.0 は少なくとも、投稿からの配列が int 以外のキーを持つことができることを理解していないため、最初のレベルのフォーム キーを直接ターゲットにする必要があります。これを見ると、それを文字列として扱うので、それを 1 つとして呼び出します。

助けてくれてありがとう。乾杯 - ジェレミー

于 2012-06-01T17:28:46.353 に答える