C# 试图了解如何提交表单

C# 试图了解如何提交表单,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我目前正在一个实习第一年的“活动报告”应用程序中工作,员工可以选择一个特定的项目,并分配他们每天工作的时间 项目的选择(取决于员工id)和页面的显示似乎起到了作用。但我的问题是:一旦我点击了应该提交表单的显示图像,它似乎会重新加载页面,好像什么都没发生一样 提交文件的视图行如下所示: <% using (Html.BeginForm("ActivityInputCreate", "Project")) { %> [...] <td> <inp

我目前正在一个实习第一年的“活动报告”应用程序中工作,员工可以选择一个特定的项目,并分配他们每天工作的时间

项目的选择(取决于员工id)和页面的显示似乎起到了作用。但我的问题是:一旦我点击了应该提交表单的显示图像,它似乎会重新加载页面,好像什么都没发生一样

提交文件的视图行如下所示:

<% using (Html.BeginForm("ActivityInputCreate", "Project"))
       { %>
[...]

<td>
    <input type="image" style="border: 0; width: 16px;" src="../../Content/Black_16x16/Save.png" onclick="this.form.submit" alt="save" />
    <input type="image" style="border: 0; width: 16px;" src="../../Content/Black_16x16/Cancel.png" onclick="    window.location.href = '/Project/ActivityInputIndex'; return false;" alt="cancel" /></td>
         <!-- the first line being to save and the second to cancel -->
<td>
}

[...]
}
我不知道如何处理表单提交,但这里是控制器(相同名称的第一个是非[HttpPost]名称:

[HttpPost]
        public ActionResult ActivityInputCreate(Project objToCreate, FormCollection form)
        {
            string year = form["Years"];
            int iyear = int.Parse(year);
            string month = form["Months"];
            int imonth = int.Parse(month);
            string strUser = Environment.UserName.ToLower();

            CalendarController c = new CalendarController();
            ViewBag.ListYears = c.ListYears(iyear);
            ViewBag.ListMonths = c.ListMonths(imonth);
            ViewBag.ListDaysOfMonth = _service.ListDaysOfMonth(iyear.ToString(), imonth.ToString());

            //nea11
            Session["ActivityInputYear"] = iyear.ToString();
            Session["ActivityInputMonth"] = imonth.ToString();

            ProjectResourceManagerService pr = new ProjectResourceManagerService(new ModelStateWrapper(this.ModelState));
            ViewBag.ProjectList = pr.ListProject();

            List<IEnumerable<SelectListItem>> ddlists = new List<IEnumerable<SelectListItem>>();

            foreach (string s in ViewBag.ListDaysOfMonth)
                ddlists.Add(_service.ListHours(0)); //id de UserActivity à la place de 0

            ViewBag.ddlists = ddlists;

            //nea12
            string strProject = form["Project"];

            //nea13
            string strSep = ";";
            string strDatas = "";
            int l = 0;
            foreach (var jour in ViewBag.ListDaysOfMonth)
            {
                string nom = "Hours" + l.ToString();
                strDatas += form[nom] + strSep;
                l++;
            }

            //ajout dans la base
            UserActivityDb db = new UserActivityDb(@"metadata=res://*/Models.CRA.csdl|res://*/Models.CRA.ssdl|res://*/Models.CRA.msl;provider=Microsoft OLE DB Provider for SQL server;provider connection string=&quot;data source=(local)\SQLEXPRESS;initial catalog=CRAV34;persist security info=True;user id=sa;password=as0;multipleactiveresultsets=True;App=EntityFramework&quot;");
            if (null != strProject)
                db.setFormattedData(iyear, imonth, ViewBag.ListDaysOfMonth, int.Parse(strProject), strUser, strDatas, true);

            IEnumerable<Project> lp = _service.List(strUser, iyear.ToString(), imonth.ToString());
            lp = lp.Where(p => (true == db.ExistUserActivity(iyear, imonth, ViewBag.ListDaysOfMonth, p.ProjectId, strUser)));


            //nea35
            List<string[]> lstInts = new List<string[]>();

            foreach (Project p in lp)
            {
                string strInts = db.getFormattedData(iyear, imonth, ViewBag.ListDaysOfMonth, p.ProjectId, strUser, null, 0);
                string[] ints = strInts.Split(';');

                lstInts.Add(ints);

            }
            ViewBag.ProjectInts = lstInts;

            return View("ActivityInputIndex", lp);
        }
[HttpPost]
公共行动结果活动输入创建(项目对象创建,表单集合表单)
{
字符串年=形式[“年”];
int iyear=int.Parse(年);
字符串月份=形式[“月”];
int imonth=int.Parse(月);
string strUser=Environment.UserName.ToLower();
CalendarController c=新的CalendarController();
ViewBag.ListYears=c.ListYears(iyear);
ViewBag.ListMonths=c.ListMonths(imonth);
ViewBag.ListDaysOfMonth=\u service.ListDaysOfMonth(iyear.ToString(),imonth.ToString());
//nea11
会话[“ActivityInputYear”]=iyear.ToString();
会话[“ActivityInputMonth”]=imonth.ToString();
ProjectResourceManagerService pr=新的ProjectResourceManagerService(新的ModelStateWrapper(this.ModelState));
ViewBag.ProjectList=pr.ListProject();
List ddlists=新列表();
foreach(ViewBag.ListDaysOfMonth中的字符串s)
ddlists.Add(_service.ListHours(0));//id de UserActivityála place de 0
ViewBag.ddlists=ddlists;
//nea12
string strProject=form[“Project”];
//nea13
字符串strep=“;”;
字符串strDatas=“”;
int l=0;
foreach(ViewBag.ListDaysOfMonth中的var日)
{
字符串nom=“Hours”+l.ToString();
标准数据+=格式[nom]+STREP;
l++;
}
//阿约特丹斯基地酒店
UserActivityDb db=new UserActivityDb(@“metadata=res://*/Models.CRA.csdl | res://*/Models.CRA.ssdl | res://*/Models.CRA.msl;provider=Microsoft OLE db provider for SQL server;provider connection string=“数据源=(本地)\SQLEXPRESS;initial catalog=CRAV34;persist security info=True;user id=sa;password=as0;multipleactiveresultsets=True;App=EntityFramework“”);
if(null!=strProject)
db.setFormattedData(iyear、imonth、ViewBag.ListDaysOfMonth、int.Parse(strProject)、strUser、strDatas、true);
IEnumerable lp=_service.List(strUser,iyear.ToString(),imonth.ToString());
lp=lp.Where(p=>(true==db.existorActivity(iyear、imonth、ViewBag.ListDaysOfMonth、p.projectd、strUser));
//东北35
List lstInts=新列表();
foreach(lp中的项目p)
{
string strInts=db.getFormattedData(iyear、imonth、ViewBag.ListDaysOfMonth、p.ProjectId、strUser、null、0);
字符串[]int=strInts.Split(“;”);
添加(整数);
}
ViewBag.projectments=lsInts;
返回视图(“ActivityInputIndex”,lp);
}
我很想给你更精确的解释,但请记住大部分代码不是我的,是最后一个实习生的

TL;DR:页面的显示很好,我想在DropDownList填充后提交,提交按钮什么都不做


谢谢。

事实证明,问题来自于我的用户名输入(通过SQL插入)

用于:

command.Parameters.Add("@Login", SqlDbType.VarChar, 50).Value = sLogin;

问题不在于发送表单(它确实收到了表单),而在于SQL请求的生成方式。

从第一个表单中删除
onclick=“this.form.submit”
。a
是一个提交按钮(在任何情况下都需要是
.submit()
)我删除了它,但它似乎没有改变任何东西,我必须添加另一种提交方式,还是我不理解某些东西?只需使用
(注释掉其他2个)如果这不起作用,那么你的代码还有其他问题。我在研究之初就尝试过,可惜它似乎不起作用。在提交表单时,我应该考虑什么?问题来自哪里?编辑:或者更准确地说,一旦我点击按钮,程序会做什么?你的同事是谁正在命中controller方法。您的视图中是否有
@Html.AntiForgeryToken()
?原因可能有很多
command.Parameters.Add("@Login", SqlDbType.VarChar, 50).Value = sLogin;