我正在处理一个我报告时间的项目。我有一个复选框"没时间报告"我检查一下,它将禁用所有字段。因为如果你没有要报告的东西,你也不需要输入小时等等。
但是,在提交我的时间报告后,在返回的视图中,将选中该复选框。当我再次回到我的视野时,我希望它不被检查。如果我刷新页面,默认情况下将取消选中该复选框。
我这样返回我的观点:
return View();
我认为这与刷新相同?
执行刷新修复它,复选框将为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>
答案 0 :(得分:1)
模型有效时问题是否发生?
我注意到你实例化了
projectData = new NewTimeReportModel();
但你以后再也不用了。可能ViewData.Model
之前设置了另一个过时的实例。
您应该检查您传递的模型是否处于您期望的状态。
修改强>
另外,
我这样返回我的视图:return View();我认为这与刷新相同?
答案是否定的:它返回一个全新状态的页面。您为页面提供的状态是您作为模型传递的状态。作为View()
的参数或设置ViewData.Model
答案 1 :(得分:0)
我会说你采用的编程风格并没有帮助你清楚地看到事情。
您用于视图的模型将属性NoTimeToReport
设置为true
而不是false
。现在,为了找到原因,这将使您的代码变得复杂,因为您的模型不止一次实例化,其值设置在多个位置,并且使用{{1}将对象设置为模型多次}
相反,推荐的方法是:
将您的模型传递给ViewData.Model = projectData;
方法,如下所示:
View()
这样,您将能够看到 where 您正在使用错误的值设置其中一个属性,并且您将确保在显示视图时使用正确的模型实例