Asp.net mvc asp.net mvc-有选择地从一组输入中获取值

Asp.net mvc asp.net mvc-有选择地从一组输入中获取值,asp.net-mvc,input,Asp.net Mvc,Input,在我的页面HTML.TEXTBOX上有一堆文本输入,它们是通过for循环生成的,我只想在用户修改了这些文本框中的某些内容后读取它们的值并提交到数据库 这样做的正确方式是什么?如果文本框的数量少于100,您认为将整个内容提交到数据库更有意义吗 另外,一般来说,我如何从文本框上的一堆数据中读取值并提交到数据库?我需要一些使用键值对的东西,其中key是id,value是文本框中的输入。除非您使用JavaScript和隐藏字段来跟踪用户更改,否则您无法在不查询数据库的情况下知道哪些字段已被修改,因为we

在我的页面HTML.TEXTBOX上有一堆文本输入,它们是通过for循环生成的,我只想在用户修改了这些文本框中的某些内容后读取它们的值并提交到数据库

这样做的正确方式是什么?如果文本框的数量少于100,您认为将整个内容提交到数据库更有意义吗


另外,一般来说,我如何从文本框上的一堆数据中读取值并提交到数据库?我需要一些使用键值对的东西,其中key是id,value是文本框中的输入。

除非您使用JavaScript和隐藏字段来跟踪用户更改,否则您无法在不查询数据库的情况下知道哪些字段已被修改,因为web通常,尤其是ASP.NETMVC,它是无状态的。但是,如果您循环出字段,并用存储在对象中的数据填充字段值,则您可能可以将该对象保存在会话变量中,以便在下一个请求中进行比较

伪示例:

public ActionResult GetFormView() 
{
     var values = (select relevant information from db and store in a 
                   IQueryable<Dictionary<string, string>> or something similar
                   where you have a relation between input field id/name and value);

     Session["TheInputListValues"] = values;

     return View(values);    // Your view renders your list of input fields
}


[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveChanges(FormCollection form)
{
    var oldValues = (Dictionary<string, string>)Session["TheInputListValues"];
    var changedValues = new Dictionary<string, string>();

    foreach(string key in form.AllKeys)
    {
        if(oldValues.ContainsKey(key))
        {
            if (oldValues[key] != form[key])
            {
                changedValues(key, form[key]);
            }
        }
    }

    SaveToDB(changedValues);

    return Redirect("SomeWhereElse"); // PRG is king!
}

我还没有测试过这个实现,但是值得一试=

我已经使用jQuery做了类似的事情,而且效果非常好。将行为附加到文本框中,如果数据发生更改,则将其值提交给保存数据的操作

$(function(){
  $("input[type='text']").change(function(){
    $.post("/SaveChanges",{id: $(this).attr("id"),value : $(this).attr("text")}); 
  });
});
这将假设您有ID,它是您在每个输入上记录的某种唯一键

<input id="4576" name="4576"/>
您还可以有一个回调,即向该字段添加一个类,让他们知道信息是通过将其更改为绿色或其他方式保存的

有关更多详细信息,请查看此链接:

这没有经过测试,我只是很快就写了下来