【发布时间】:2013-12-28 23:26:22
【问题描述】:
我有一个带有各种输入字段的练习编辑表单。在用户填写练习详细信息并最终单击保存提交按钮后,此表单将发布到保存控制器操作。此表单中有一个链接(现在是 ActionLink),可将用户重定向到另一个页面以从目录中选择练习(这很有帮助,因此用户可以从带有图像的漂亮目录中选择练习,而不仅仅是下拉练习编辑表上的练习名称)。在用户从目录中选择一个练习后,他们会被重定向回练习编辑页面,我会在其中传递从目录页面中选择的练习 ID。然后将练习名称下拉菜单设置为从目录页面中选择的练习。然后,用户可以保存锻炼详情。
我遇到的问题是,在重定向到练习目录页面后,我无法找到一种保存用户输入字段值的好方法。当用户最终被重定向回练习编辑页面时,用户在重定向之前填写的练习详细信息就消失了(这是有道理的,因为我目前没有正确地保留它们。
我当前尝试持久化用户输入值的方法是使用 actionlink 将练习模型值作为匿名对象参数发送到重定向控制器操作,但是模型属性值在传递时为 null 或 0。 actionlink 似乎没有传递用户输入的输入值。
我想我可以使用 jQuery 来处理重定向的东西,所以我尝试做一个 jQuery .post,但是一旦在服务器上我不能立即重定向到另一个控制器操作,我必须进入.post 回调函数,然后将窗口 url 设置为重定向控制器操作。但是,这对于多次访问服务器来说似乎效率低下。
我觉得解决方案是在表单提交中传递这些输入值,但是我会在表单中有一个表单,我尝试过但无法工作。
@using (Html.BeginForm("Edit", "WorkoutPlanExercise",
FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="editExercise">
@Html.ValidationSummary(true)
@Html.HiddenFor(m => Model.WorkoutPlanExerciseId)
@Html.HiddenFor(m => Model.WorkoutPlanId)
@Html.HiddenFor(m => Model.ImageMimeType)
<div class="editRow">
<div class="editExerciselbl">
@Html.LabelFor(m => Model.Name):
</div>
<div class="editExerciseInput">
@Html.DropDownListFor(
x => x.SelectedExerciseId,
Model.AllExercises,
null,
new { @id = "ddlExercise" }
)
</div>
<span>
@Html.ActionLink("Browser Exercise Catalog", "ChooseCatalogExercise",
new {
workoutPlanExerciseId = Model.WorkoutPlanExerciseId,
workoutPlanId = Model.WorkoutPlanId,
reps = Model.Reps,
sets = Model.Sets,
weight = Model.Weight
})
</span>
</div>
<div class="editRow">
<div class="editExerciselbl">
@Html.LabelFor(m => Model.Reps):
</div>
<div class="editExerciseInput">
@Html.EditorFor(m => Model.Reps)
@Html.ValidationMessageFor(m => m.Reps)
</div>
</div>
<div class="editRow">
<div class="editExerciselbl">
@Html.LabelFor(m => Model.Weight):
</div>
<div class="editExerciseInput">
@Html.EditorFor(m => Model.Weight)
@Html.ValidationMessageFor(m => m.Weight)
</div>
</div>
<div class="editRow">
<div class="editExerciselbl">
@Html.LabelFor(m => Model.Sets):
</div>
<div class="editExerciseInput">
@Html.EditorFor(m => Model.Sets, new { @Value = "0" })
@Html.ValidationMessageFor(m => m.Sets)
</div>
</div>
<div id="exerciseImageContainer">
@Html.Partial("Edit.ExerciseImage", Model)
</div>
<input id="save" type="submit" value="Save" />
@Html.ActionLink("Cancel and return to List", "Index", new { workoutPlanId = Model.WorkoutPlanId })
</div>
}
控制器:
public ActionResult ChooseCatalogExercise(int workoutPlanExerciseId, int workoutPlanId, int reps, int sets, decimal weight)
{
return RedirectToAction("ChooseCatalogExercise", "ExerciseCatalog",
new { workoutPlanExerciseId = model.WorkoutPlanExerciseId, workoutPlanId = model.WorkoutPlanId, reps = model.Reps, sets = model.Sets, weight = model.Weight });
}
【问题讨论】:
-
请不要将“ASP.NET MVC”简单地称为“MVC”。一种是框架,另一种是独立于语言的架构模式。这就像调用 IE - “互联网”
-
对此感到抱歉。固定说 ASP.NET MVC。
-
我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
-
谢谢!今后我一定会牢记这一点 :)
标签: c# asp.net-mvc