我目前正在尝试在jquery模式对话框上进行服务器端验证。我使用Ajax提交表单,当验证失败时,我想显示对话框并指出验证错误。
我的大部分都在工作,但我只有一个问题。
表格正在提交并由控制人员接收。它意识到页面上存在错误并尝试重新显示视图。它无法重新显示视图,因为它需要未提交的字段,只显示某些数据的表。
我的问题是,如何让视图提交一个包含模型数据的表。
为清楚起见,这就是发生的事情:
1.按下对话框提交按钮
2.提交可编辑的表格数据< ----我希望提交不可编辑的数据
3.Controller验证模型
4.Validation失败
5.Controller将模型返回到视图
6.View无法显示,因为缺少某些数据
这是我想要提交的不可编辑数据
@foreach (var hour in Model.Hours)
{
<tr>
<td>@hour.CreatedBy</td>
<td>@hour.WorkingStart</td>
<td>@hour.HourComment</td>
<td>@hour.SecondsUsed</td>
</tr>
}
模特:
public TaskEditAVwTask Task { get; set; }
public int numdays { get; set; }
public string firstday { get; set; }
public string lastday { get; set; }
public float taskhoursused { get; set; }
public List<TaskEditAVwHour> Hours { get; set; }
主要问题是视图要求此数据重新显示。
我可以在验证失败时从数据库中获取数据,但我认为这应该是最后的手段。
对不起,如果不是很清楚,我试着尽可能清楚。
答案 0 :(得分:1)
如果您不想再次从数据库中获取它们,为什么不将它们放在隐藏的字段中呢?
@Html.HiddenFor(m => m.MyNonEditableField)
然后,您可以在POST上忽略对这些值的任何更改,以确保没有人对此数据进行任何偷偷摸摸的更改。
这是将不可编辑数据传递给POST操作的规范方法。但是,如果此表大于您允许的表,那么再次获取数据确实没有错。
答案 1 :(得分:0)
我不知道我是否理解正确。 如果您想通过表单传递不可编辑的数据,可以使用:
@Html.HiddenFor(model => model.NonEditableFieldToBePassed)
答案 2 :(得分:0)
管理以使其正常运行。这就是我所做的:
@for (int i = 0; i < Model.Hours.Count(); i++)
{
<tr>
<td>@Model.Hours[i].CreatedBy @Html.HiddenFor(m => m.Hours[i].CreatedBy)</td>
<td>@Model.Hours[i].WorkingStart @Html.HiddenFor(m => m.Hours[i].WorkingStart)</td>
<td>@Model.Hours[i].HourComment @Html.HiddenFor(m => m.Hours[i].HourComment)</td>
<td>@Model.Hours[i].SecondsUsed @Html.HiddenFor(m => m.Hours[i].SecondsUsed)</td>
</tr>
}
感谢Ant P让我指向了正确的方向。