Asp.net返回视图返回并选中复选框

时间:2015-09-29 07:52:13

标签: c# asp.net

我正在处理一个我报告时间的项目。我有一个复选框"没时间报告"我检查一下,它将禁用所有字段。因为如果你没有要报告的东西,你也不需要输入小时等等。

但是,在提交我的时间报告后,在返回的视图中,将选中该复选框。当我再次回到我的视野时,我希望它不被检查。如果我刷新页面,默认情况下将取消选中该复选框。

我这样返回我的观点: return View();我认为这与刷新相同?

第一份报告: enter image description here

但是当我返回到同一视图时,仍然会选中复选框: enter image description here

执行刷新修复它,复选框将为false。但必须有一种更简单的方法来实现这一点,而不是刷新页面?

这是我的控制者:

public ActionResult TimeReport(FormCollection form, Guid? id, bool? noTimeToReport)
    {
        ShowProjects(true);

        NewTimeReportModel projectData = new NewTimeReportModel();

        //Deletes Timereport
        if (form != null && form.AllKeys.Contains("delete"))
        {
            new DatabaseLayer().DeleteTimeReport(Guid.Parse(form["ReportId"]));
            LoadDefaultSettings(projectData);
            ViewData.Model = projectData;
            ViewData["deleted"] = true;
            return RedirectToAction("Index");
        }

        //Update Timereport
        if (id.HasValue && (form == null || form.AllKeys.Length == 0))
        {
            using (DatabaseLayer db = new DatabaseLayer())
            {
                var timeReport = db.GetTimeReport(id.Value);
                projectData = new NewTimeReportModel(timeReport);
            }
        }
        //Loads default settings
        else if (form == null || form.AllKeys.Length == 0)
        {
            LoadDefaultSettings(projectData);
        }
        else
        {
            //Get's all the dates from the view and formates them to look like yy-mm-dd so we can parse it to a datetime.
            List<string> dates = FormateDate(form["date"]);
            //Loops over all the dates and saves the dates to the database.
            projectData = ReportDates(form, projectData, dates, noTimeToReport);

            if (ModelState.IsValid)
            {
                //If we get this far everything is ok and we save the timereport to the database
                projectData.SaveToDatabase(Constants.CurrentUser(User.Identity.Name));
                ViewData["posted"] = true;
                projectData = new NewTimeReportModel();
            }
            else if (projectData.Projects.Count == 1)
            {
                ListAllMssingDays();
                ViewData.Model = projectData;
                return View(projectData);
            }

            //Loads default settings if all dates been reported.
            LoadDefaultSettings(projectData);
        }
        //Get's and lists all the missing days
        ListAllMssingDays();
        return View();
    }

这是我的观点:

<div class="col-md-6" id="test12">
                    <div class="tabbable tabbable-custom tabbable-noborder tabbable-reversed">
                        <div class="tab-content">
                            <div class="portlet light bordered">
                                <div class="portlet-title">
                                    <div class="caption">
                                        <span class="caption-subject font-green-sharp bold uppercase">Rapportera tid</span>
                                    </div>
                                </div>
                                <div class="portlet-body form">
                                    <div class="form-group">
                                        <label class="col-md-5">Ingen tid att rapportera</label>
                                        @Html.CheckBoxFor(model => model.NoTimeToReport, new { @id = "check" })
                                    </div>
                                    @if (Model.ReportId.HasValue)
                                    {
                                        <div class="form-group">
                                            <label class="col-md-4 control-label">Redigera datum:</label>
                                            <div class="col-md-5">
                                                @Html.TextBox("date", Model.Date.ToShortDateString(), new { @class = "form-control", @readonly = "true" })
                                            </div>
                                        </div>
                                    }
                                    <div class="form-group">
                                        <label class="col-md-4 control-label">Start tid:</label>
                                        <div class="col-md-5">
                                            @Html.TextBox("startTime", Model.Times.StartTime, new { @class = "form-control timepicker timepicker-24" })
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-md-4 control-label">Slut tid:</label>
                                        <div class="col-md-5">
                                            @Html.TextBox("endTime", Model.Times.EndTime, new { @class = "form-control timepicker timepicker-24" })
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-md-4 control-label">Rast Längd:</label>
                                        <div class="col-md-5">
                                            @Html.TextBox("breakTime", Model.Times.BreakTime, new { @class = "form-control timepicker timepicker-24" })
                                        </div>
                                    </div>
                                    <div class="form-group">
                                        <label class="col-md-4 control-label">Tid jobbad:</label>
                                        <div class="col-md-5">
                                            @Html.TextBox("workedHours", Model.Times.WorkedHours, new { @class = "form-control", @disabled = "" })
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>

2 个答案:

答案 0 :(得分:1)

模型有效时问题是否发生?

我注意到你实例化了

projectData = new NewTimeReportModel();

但你以后再也不用了。可能ViewData.Model之前设置了另一个过时的实例。

您应该检查您传递的模型是否处于您期望的状态。

修改

另外,

  

我这样返回我的视图:return View();我认为这与刷新相同?

答案是否定的:它返回一个全新状态的页面。您为页面提供的状态是您作为模型传递的状态。作为View()的参数或设置ViewData.Model

答案 1 :(得分:0)

我会说你采用的编程风格并没有帮助你清楚地看到事情。

您用于视图的模型将属性NoTimeToReport设置为true而不是false。现在,为了找到原因,这将使您的代码变得复杂,因为您的模型不止一次实例化,其值设置在多个位置,并且使用{{1}将对象设置为模型多次}

相反,推荐的方法是:

  • 只对您的模型进行一次
  • 根据需要设置其所有属性
  • 从不设置ViewData.Model属性
  • 将您的模型传递给ViewData.Model = projectData;方法,如下所示:

    View()

这样,您将能够看到 where 您正在使用错误的值设置其中一个属性,并且您将确保在显示视图时使用正确的模型实例