我有一个html表单,提交给我希望插入/更新数据库的C#ashx处理程序
我用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
这究竟是如何翻译的?
编辑
好吧我几乎得到了这个,但是我的迭代器遍历所有的请求集合变量,我希望它只覆盖一个特定的命名变量,在这种情况下是“children”
即localhost / page?operation = update&amp; children = 9&amp; children = 8&amp; children = 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);
}
我希望它忽略除特定var
之外的所有内容答案 0 :(得分:5)
如果你正在发帖子。我觉得这样的事情会起作用。
<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"/>
当表单被提交时,浏览器将以逗号分隔的所有值发送到服务器
然后在服务器端执行此操作:
var selected = context.Request.Form["children"].Split(',');
Selected将是浏览器传入的每个值的字符串数组。然后,您可以循环遍历它们并执行您需要的任何操作。
希望这会有所帮助。
答案 1 :(得分:0)
我昨天刚刚开始工作。我最终使用了一个隐藏字段,该字段将保存多个已选中的复选框ID。因此,如果该路由适合您,您可以创建一个checkboxlist编辑器模板或控件。这可能有一个脚本,如:
(tempId将保存复选框/复选框列表的常用“name”属性值,并且我们有“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中提取元素。
答案 2 :(得分: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);
}
}
}