Asp.net 如果我来自mvc中的Create,是否有一个变量通知编辑操作?
使用mvc3,如果我来自创建到编辑操作,是否有一些变量可以通知我 如果在GET中也使用了路由,则我需要某种行为,否则,如果触发了CreateAction,则我需要打开不同的上下文编辑 失败的第一个解决方案:创建额外的操作编辑,激发:当前对控制器类型“XController”的操作“编辑”请求在两个操作方法之间不明确Asp.net 如果我来自mvc中的Create,是否有一个变量通知编辑操作?,asp.net,asp.net-mvc-3,razor,Asp.net,Asp.net Mvc 3,Razor,使用mvc3,如果我来自创建到编辑操作,是否有一些变量可以通知我 如果在GET中也使用了路由,则我需要某种行为,否则,如果触发了CreateAction,则我需要打开不同的上下文编辑 失败的第一个解决方案:创建额外的操作编辑,激发:当前对控制器类型“XController”的操作“编辑”请求在两个操作方法之间不明确 更重要的是,是否存在对MVC的误解?这个解决方案对任何人来说都很奇怪吗?我正面临mvc的质疑: 您可以向“编辑”操作添加一个可选参数,用于标记您是否来自“添加”操作,也可以从“编辑”
更重要的是,是否存在对MVC的误解?这个解决方案对任何人来说都很奇怪吗?我正面临mvc的质疑: 您可以向“编辑”操作添加一个可选参数,用于标记您是否来自“添加”操作,也可以从“编辑”中创建一个具有唯一名称的全新操作 前者看起来像:
public ActionResult Edit(int id, bool? fromCreate = false)
{
if(fromCreate)
{
// do your special processing
}
}
后者显然是:
public ActionResult Edit(int id)
{
}
public ActionResult EditNewlyCreated(int id)
{
}
如果有两个编辑方法,则它们必须具有不同的方法输入以区分它们
public ActionResult Edit(int id)
{
return View(db.GetWidget(id));
}
public ActionResult Edit(int id, string username)
{
ViewBag.Username = username;
return View(db.GetWidget(id));
}
或者,只需使用可选参数将该方法转换为一个
public ActionResult Edit(int id, string username = "")
{
ViewBag.Username = username;
return View(db.GetWidget(id));
}
我还建议在创建视图中绘制一个方法属性,如[HttpGet]、[HttpPost]等。如果在操作中:
@{ TempData["FromCreate"] = true; }
然后在编辑获取操作中:
public ActionResult Edit()
{
if( TempData.ContainsKey("FromCreate") )
{
var fromCreate = (bool)TempData["FromCreate"];
TempData.Remove("FromCreate");
if( fromCreate )
{
//insert logic
}
}
}
如果您在MyView中有链接,请执行以下操作:
@model ModelClass
@Html.BeginForm()
{
if(Model.Id > 0)
{
@Html.HiddenFor(m => m.Id);
}
...
}
在控制器中:
public ActionResult Edit(int id)
{
var model = modelRepository.GetById(id);
Return View("MyView", model);
}
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
var model = modelRepository.GetById(id);
TryUpdateModel(model)
{
modelRepository.Save(model);
}
}
public ActionResult Create()
{
var model = new ModelClass();
Return View("MyView", model);
}
[HttpPost]
public ActionResult Create(ModelClass model)
{
...
}
在视图中,如果Model.Id>0,这意味着我们使用编辑操作进入视图,并且当表单发布时,如果在发布参数中有Id字段为Id隐藏,则将调用Editwith HttpPost,否则如果没有Id参数,则将调用创建操作您的第一个示例将不起作用。调用Edit时您会收到一个错误,因为如果缺少username,无法区分要调用哪个重载。它调用第一个重载还是第二个重载并传递null作为值?@Justin-将这两个代码示例视为完全独立的-它们不可能同时存在。我不是说两个示例,在你的第一个例子中,我严格地引用了这两种方法。@JustinNiessner你是对的,这个例子不起作用。他应该在每个编辑操作上放置不同的方法属性。这个解决方案很棒!缺点是url的格式类似于Moo/Edit/76?fromCreate=True。是否有其他方法可以从url中隐藏此fromCreate?