隐藏/查看编辑视图表单

时间:2015-02-24 13:09:46

标签: asp.net asp.net-mvc

我正在开发一个与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语句?

2 个答案:

答案 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();
}