MVC:使用来自Controller的数据传回View?

时间:2016-08-15 14:29:52

标签: asp.net-mvc view controller asp.net-mvc-5

我有一个Controller,它在返回View之前执行检查,以防止有人尝试删除客户端(如果它们链接到另一个表)。如果链接存在,我的列表中会包含一些项目。

控制器:

[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> DeleteConfirmed(int id)
{
    //First check if the ClientID is linked to an environment
    List<Models.Environment> tempEnv = db.EnvironmentsRepo.Find(x => x.ClientID == id).ToList();
    if(tempEnv.Count > 0)
        return View("~/ClientsAdmin/Delete.cshtml", tempEnv);
}

查看:

@model TNT_Client.Models.Client
@{
ViewBag.Title = "Delete";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Delete Client</h2>
<h3>Are you sure you want to delete this?</h3>
<div>
    <h4>Selected Client</h4>
    <dl class="dl-horizontal">
        <dt>
            @Html.DisplayNameFor(model => model.Name)
        </dt>
    </dl>
</div>

我正在返回tempEnv变量和我的视图,有没有办法可以从我的视图中访问该变量?例如,可以将其分配到ViewBag.TitleLayout变量所在的位置?

2 个答案:

答案 0 :(得分:0)

您可以在表单中创建一个隐藏字段,以便在用户单击“提交按钮”

时将其发送到服务器

类似

<input type="hidden" name="tempEnv"/>

然后在你的控制器中

public async Task<ActionResult> DeleteConfirmed(int id, string tempEnv)

更新:

如果要在视图中使用它,您只需使用ViewBag属性即可。

控制器中的

List<Models.Environment> tempEnv = db.EnvironmentsRepo.Find(x => x.ClientID == id).ToList();
ViewBag.TempEnv = tempEnv;
在您的视图中

@if (ViewBag.TempEnv.Count > 0)
{
    ...
}

答案 1 :(得分:0)

在您的控制器中,您可以添加ViewBag.tempEnv = tempEnv.Count

然后在您查看ViewBag.Title的视图中,您可以var tempEnv = @ViewBag.tempEnv