如何将列表和字符串从一个控制器的两个操作传递到一个视图?如何在视图文件中单独获取这些数据?

Posted

技术标签:

【中文标题】如何将列表和字符串从一个控制器的两个操作传递到一个视图?如何在视图文件中单独获取这些数据?【英文标题】:How to pass a list and a string to one view from two actions of one controller? How to get this data separately in view file? 【发布时间】:2013-03-12 07:08:49 【问题描述】:

请看下面 index.cshtml 的这段代码:-

列表如下所示&字符串是标题,为此我将公司 ID 发送给控制器

@model MvcApplication3.Models.Company 

        @foreach (var item in Model)
        
            <tr>
                <td>
                    @html.DisplayFor(modelItem => item.CompanyName)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Template)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Caption)
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new  id = item.CompanyID ) |
                    @Html.ActionLink("Details", "Details", new  id = item.CompanyID ) |
                    @Html.ActionLink("Delete", "Delete", new  id = item.CompanyID )
                </td>
            </tr>
        
    </table>
</div>       

    @using (Html.BeginForm("GetCaption", "Company", FormMethod.Get))
    
        @Html.TextBox("txtCmpID")
        <input id="btnGetCaption" type="submit" value="Get Caption" />
    
    <span style="color: Black; position: absolute; top: 100px; left: 20px;">
        @text = 
    </span>

Controller.cs 文件中的代码:-

private DynaPortalContext db = new DynaPortalContext();

    //
    // GET: /Company/

    public ViewResult Index()
    
        return View(db.Companies.ToList());
    
    //
    // GET: /Company/caption
    [ActionName("GetCaption"),HttpPost]
    public ActionResult GetCaption(string txtCmpID)
    
        Company company = db.Companies.Find(txtCmpID);
        return View("Index",company);
     

请告诉我如何将控制器的 GetCaption() 方法生成的标题显示到 @text=...中的视图中...

【问题讨论】:

【参考方案1】:

您的GetCaption 方法实际上并没有获得标题,而是获得了一家公司。假设Company 包含您要查找的Caption,您可以简单地在范围内显示Caption 属性:

<span style="color: Black; position: absolute; top: 100px; left: 20px;">@Model.Caption</span>

另外,当您使用 Get 而不是 Post 时,为什么要在表单中包含一个文本框?如果您没有将该值发布回服务器,则在此处使用输入捕获元素是多余且具有误导性的。最好使用跨度,就像使用标题一样。

MVC 的约定是创建与其对应的控制器动作同名的视图。在您的情况下,您有 2 个不同的控制器操作,它们都返回相同的视图 Index。在Index 控制器操作中,您传递公司列表作为模型。在GetCaption 控制器操作中,您将单个控制器操作传递给相同的Index 视图,这将不起作用。看起来您想要第二个视图来处理 GetCaption 操作。不清楚您问题中的第二个代码块是在 Index 视图内还是其他代码块?

【讨论】:

你说的是真的,我不需要一个文本框,如果我在 Getcaption 方法中使用静态值作为 5.. 但我的目的是让用户输入一个 ID,将该值发布回控制器并将结果显示在视图中.. 很公平,但是如果您想将该值发布到控制器,则需要在控制器操作中使用 HttpPost。如果要使用 HttpGet,则需要通过查询字符串传递值。我仍然不明白该页面应该如何工作。你能解释一下要求吗? 要求是在一个视图中显示公司列表和标题字符串。对于 Caption,用户必须在文本框中输入 ID 值。 然后呢?用户输入 id 后,他们应该看到什么? 您是否考虑过发出 ajax 请求来获取标题?

以上是关于如何将列表和字符串从一个控制器的两个操作传递到一个视图?如何在视图文件中单独获取这些数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串列表从控制器传递到视图(或者我现在尝试这样做的方式可能不是这样)

如何通过ajax jquery将列表字符串从视图传递到控制器

如何使用“UserDefaults.standard.set()”将信息从一个控制器传递到另一个控制器

如何将项目列表从视图传递到控制器(ASP.NET MVC 4)

通过表单将复杂类型从部分视图传递到控制器操作

如何将可操作的控制字符从 JSON 文本元素传递到 razor 组件 Blazor 变量