我正在开发一个与MongoDB结合使用的小型ASP.NET MVC 4应用程序。目前我有4个视图:索引,创建,列表,编辑。 Create是一个将数据放入数据库的表单。 List是显示数据的列表。编辑是一种编辑数据的表单。这三个视图在Index视图(RenderAction)中呈现。
目标是在索引视图中仅显示两个视图。索引与创建的组合,或索引与编辑的组合。
此时我遇到编辑视图(控制器内部)的问题:
[HttpGet]
public ActionResult Edit(string id)
{
Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id));
return View(car.ConvertToUpdateViewModel());
}
修改视图:
@model MvcApplication1.ViewModels.UpdateCarViewModel
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>UpdateCarViewModel</legend>
@Html.HiddenFor(model => model.Id)
<div class="editor-label">
@Html.LabelFor(model => model.Make)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Make)
@Html.ValidationMessageFor(model => model.Make)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.NumberOfDoors)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.NumberOfDoors)
@Html.ValidationMessageFor(model => model.NumberOfDoors)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DailyRentalFee)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DailyRentalFee)
@Html.ValidationMessageFor(model => model.DailyRentalFee)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
索引视图:
@model MvcApplication1.ViewModels.InsertCarViewModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@{Html.RenderAction("Create", Model);}
</div>
<div>
@{Html.RenderAction("List", Model);}
</div>
<div>
@{Html.RenderAction("Edit", Model);}
</div>
</body>
</html>
显然,编辑视图需要显示一个ID,当我使用RenderAction
时,它会出现错误,因为启动应用程序时没有ID。我希望在不需要时隐藏此视图,并仅在需要时显示此视图。如果没有Javascript / Jquery,我怎么能达到这个目的。
我的ActionResult
内是否需要if / else语句?
答案 0 :(得分:1)
最简单快捷的做法就是检查id
是否有值
[HttpGet]
public ActionResult Edit(string id)
{
if (String.IsNullOrEmpty(id))
{
return null;
}
Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id));
return View(car.ConvertToUpdateViewModel());
}
答案 1 :(得分:0)
这不是问题,在MVC编辑控制器中通常有一个id参数,所以为了消除你的问题你可以检查id是否存在,如下所示:
[HttpGet]
public ActionResult Edit(string id)
{
Car car = CarRentalContext.Cars.FindOneById(new ObjectId(id));
if (car != null)
{
return View(car.ConvertToUpdateViewModel());
}
//if we get this far show other view
return View();
}