1

我目前正在尝试在 jquery 模式对话框上进行服务器端验证。我正在使用 Ajax 提交表单,当验证失败时,我想显示对话框并指出验证错误。

我的大部分工作都在工作,但我只有一个问题。

表单正在提交并由控制器接收。它意识到页面上有错误并尝试重新显示视图。它无法重新显示视图,因为它需要未提交的字段,即仅显示一些数据的表。

我的问题是,如何让视图提交包含模型数据的表。

为了清楚起见,这就是正在发生的事情:

1.模态对话框提交按钮按下

2.提交可编辑的表单数据<----我要提交不可编辑的数据

3.Controller验证模型

4.验证失败

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; }

主要问题是视图需要这些数据重新显示自己。

当验证失败时,我可以从数据库中获取数据,但我认为这应该是最后的手段。

抱歉,如果这不是很清楚,我已尽力使其尽可能清楚。

4

3 回答 3

1

如果您不想再次从数据库中获取它们,为什么不将它们放在隐藏字段中呢?

@Html.HiddenFor(m => m.MyNonEditableField)

然后,您可以简单地忽略 POST 上对这些值的任何更改,以确保没有人对这些数据进行任何偷偷摸摸的更改。

这是将不可编辑的数据传递给 POST 操作的规范方法。但是,如果此表比您允许的大,那么再次获取数据确实没有错。

于 2013-09-02T09:21:17.583 回答
0

我不知道我是否理解正确。如果你想通过表单传递不可编辑的数据,你可以使用:

@Html.HiddenFor(model => model.NonEditableFieldToBePassed)
于 2013-09-02T09:20:30.800 回答
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 为我指明了正确的方向。

于 2013-09-02T10:31:01.147 回答