2014-01-17 143 views
1

我有提交给我希望将插入一个C#ASHX处理HTML表单/更新复式复选框具有相同名称的属性循环

我在PHP和ColdFusion写这个数据库中,但我不能弄清楚如何在C#中做到这一点

HTML表单

 <form id="copyto"> 
    <input type="hidden" name="operation" value="update" /> 
    <label><input type="checkbox" name="children[]" checked="checked" value="001"> 
Andrew Regan</label> 

    <label><input type="checkbox" name="children[]" checked="checked" value="101"> 
Arthur Regan, III</label> 

    <input type="checkbox" name="children[]" checked="checked" value="968"> 
Tim Reagan 
    </form> 

C#ASHX处理程序

foreach(string key in context.Request.Params["children"]) 
{ 
    ListDictionary updateParams = new ListDictionary(); 
    updateParams.Add("rowid", key); 
    string sSql = @"insert into temp select * from children where c.id = :rowid"; 
    dbi.ExecuteNonQuerySql(sSql, updateParams); 

} 

通常我会在PHP中遍历$ _POST ['children'],然后执行sql

这是怎么翻译的?

编辑

确定香港专业教育学院几乎得到了这一点,但是我的迭代器越过所有的请求收集的变量,我希望它只是一个特定命名的变量去了,在这种情况下,“孩子”

即本地主机/页?操作=更新&孩子= 9个&孩子= 8个&孩子= 17

foreach(string key in context.Request.QueryString) 
{ 
    ListDictionary updateParams = new ListDictionary(); 
    updateParams.Add("row_id", context.Request.QueryString[key]); 
    string sSql = @"insert into dug select :row_id from dual"; 
    dbi.ExecuteNonQuerySql(sSql, updateParams); 
} 

我希望它忽略一切,但具体的变化

回答

4

如果你正在做一个职位。我认为这样的事情会起作用。

<input type="checkbox" name="children" value="108"/> 
<input type="checkbox" name="children" value="109"/> 
<input type="checkbox" name="children" value="110"/> 
<input type="checkbox" name="children" value="111"/> 

浏览器将发送所有表单时submited

然后在你的服务器端,您可以做到这一点逗号分隔到服务器的值:

var selected = context.Request.Form["children"].Split(','); 

选择将是一个浏览器传入的每个值的字符串数组。然后你可以循环它们并做你需要的任何事情。

希望这有助于一些。

+0

如果你也在查询字符串中传递它们,它也会起作用。 – Matt

+0

不错,它似乎比我发布的答案更清洁,谢谢 –

0

我昨天刚刚在这工作。我结束了使用隐藏的字段,将保存多个复选复选框ID。所以,如果这条路线适合你,你可以创建一个checkboxlist编辑器模板或控件。这可能有一个脚本,例如:

(tempId将举行常见的“名称”属性对您的复选框/ CheckBoxList的价值,我们有“somehiddenfield”隐藏字段来保存所选值)

<script> 
    $(function() { 
     var arrTmp = []; 
     //Update array on selection change 
     $('input[name="@String.Format("{0}[]", tempId)"]').change(function() { 
      arrTmp = []; 
      $('input:checked[name="@String.Format("{0}[]", tempId)"]').each(function() { arrTmp.push($(this).val()); }); 
      $('input[id="somehiddenfield"]').val(arrTmp.join(',')); 
     }); 
    }); 
</script> 

然后,在服务器端回发时,表单集合将只包含我们编写检查值的隐藏字段。以任何方式将它拆分(例如逗号分隔在我的示例中),并且您很好。我的服务器端在MVC中实现,但对于WebForms,您可以从Request.Form字典(Request.Form["somehiddenfield"].ToString())或甚至Request.Params中提取元素,就像您使用的一样。

0

紧接着我放出来的赏金当然-_-的

foreach (string k in context.Request.QueryString) 
    {  
     if (k.StartsWith("children")){ 
     foreach (string v in context.Request.QueryString.GetValues(k)){ 
      ListDictionary updateParamss = new ListDictionary(); 
      updateParamss.Add("row_id", v); 

       string Sql = @"insert into dug select :row_id from dual"; 
       dbi.ExecuteNonQuerySql(Sql, updateParamss); 
       } 
      } 


    } 
相关问题