我有一个部分视图(用户控件),由我的创建和编辑视图共享。当我在编辑视图中使用它时,我必须包含一个隐藏字段(Html.HiddenFor
)以防止我的数据服务中出现“行已更改或未找到”错误,但是当我在创建视图中使用它时,我必须删除PK隐藏字段,以防止尝试插入标识列时出现错误。
在此应用程序中不使用标识列是不可行的,那么如何根据调用的操作“打开或关闭”PK隐藏字段?
邮政编码:
[HttpPost]
public ActionResult Edit(JobCardViewData viewData)
{
try
{
jobCardService.Update(viewData.JobCard);
修改视图摘录:
<% Html.RenderPartial("JobCardInput", Model); %>
部分摘录:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Poynting.Installation.Web.ViewData.JobCardViewData>" %>
<% using (Html.BeginForm())
答案 0 :(得分:1)
当我在创建视图中使用它时,我 必须删除PK隐藏字段,以 防止尝试插入时出错 进入身份栏。进入身份栏。
保留隐藏字段并更新Create操作以检查值是0还是null(我假设JobCard
是Create操作的参数类型)。另一个想法是重新创建一个新的JobCard对象,它不包括设置id值,并将新对象发送到jobCardService
创建方法。
那我怎么能'切换'PK隐藏 字段打开或关闭取决于哪个 已经调用了行动?
您可以创建一个HtmlHelper来为您渲染隐藏字段。检查ViewContext RouteData集合,如果需要,操作名称相应地输出隐藏字段。 (伪代码..)
public static MvcHtmlString HiddenTest(this HtmlHelper htmlHelper, string name)
{
string currentAction = htmlHelper.ViewContext.RouteData.Values["action"].ToString();
if (currentAction = "Edit"){
return htmlHelper.Hidden(htmlHelper, name);
}
return null;
}
答案 1 :(得分:0)
ThingController /创建
ThingController /编辑/ 1234