我有3个连续的日期字段:Start,End,Certify。当用户指示他想要更新给定行中的日期时,我动作链接到该表的控制器,任务,其中我添加了代码以确定哪个字段为空,然后指向定制到该字段的视图。我的概念是返回将转到脚手架生成的编辑,其中数据将被保存。所以3个观点有共同的回报。
我收到404错误。由于我知道该名称存在,因此必须无法使用。
脚手架生成后代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Task task)
{
if (ModelState.IsValid)
{
db.Entry(task).State = EntityState.Modified;
db.SaveChanges();
}
我的选择代码:
public ActionResult EditBegin(int? id)
{
Task ViewModel = db.Tasks.Find(id);
{
if (ViewModel.SStart == null)
{
ViewModel.TaskID = id.Value;
ViewModel.SStart = DateTime.Now;
return View("EditStart", ViewModel);
}
else if (ViewModel.SEnd == null)
{
ViewModel.TaskID = id.Value;
ViewModel.SEnd = DateTime.Now;
return View("EditEnd", ViewModel);
}
else if (ViewModel.SCert == null)
{
ViewModel.TaskID = id.Value;
ViewModel.SCert = DateTime.Now;
return View("EditCert", ViewModel);
}
return View("EditCert", ViewModel); //solves not all paths have return error
}
}
在EditEnd中查看EditorFor和Actionlink。
@Html.EditorFor(model => model.SEnd) // preloaded with NOW
@Html.ActionLink("Save End Date", "Edit", "Task" ) //is the TaskID passed back as part of this?
因此,在EditEnd视图中,按“保存结束日期”按钮,我收到404错误。我已经测试了任务编辑功能以确认“资源可用”并且工作正常。
我发现路径是指向文件夹... / task / edit而不是控制器。
如何让它引用控制器。删除引号无济于事。
由于
我的观点是:
@model MVCBSV.Models.Task
@{
ViewBag.Title = "Scanedit";
}
<h2>Add Start Date</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
Html.BeginForm("Edit", "Task", FormMethod.Post);
<fieldset>
<legend>Task</legend>
@Html.HiddenFor(model => model.TaskID)
<div class="editor-label">
Step Name
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.StepName);
</div>
<div class="editor-label">
@Html.LabelFor(model => model.SStart)
</div>
<div class="editor-field">
@Html.EditorFor( model => model.SStart)
@Html.ValidationMessageFor(model => model)
</div>
@* <p>
<input type="submit" value="Save" />
</p>*@
</fieldset>
}
<div>
@Html.ActionLink("Save Start Date", "Edit", "Task" )
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
答案 0 :(得分:0)
您编辑的方法被装饰为HTTP Post方法。锚标记将提供浏览器用于发出HTTP GET请求的链接。您可以从属性更改为HttpGet,这将起作用。
但是,最好将表单实际发布到保存方法。