C#MVC,持久显示仅向控制器显示数据

时间:2013-09-02 09:16:58

标签: c# jquery asp.net-mvc validation dialog

我目前正在尝试在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; }

主要问题是视图要求此数据重新显示。

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

对不起,如果不是很清楚,我试着尽可能清楚。

3 个答案:

答案 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让我指向了正确的方向。