【问题标题】:c# MVC Add multiple instances of a user control to a single view pagec# MVC 将用户控件的多个实例添加到单个视图页面
【发布时间】:2010-07-15 12:49:29
【问题描述】:

我能做什么: 我的目标是创建一个视图,其中根据需要将由 TextBox 和 Table 组成的用户控件添加到页面中。用户将在文本框中键入 SQL 查询,表格将用于呈现结果。

我需要做的: 当用户请求它们时,我需要将多个这些控件添加到页面中。它们将按步骤编号。

例如:
Step 1 = sql查询获取参数列表; Step 2 = 使用第一个参数返回某个值的sql查询; 第 3 步 = 返回值的累积总和的 sql 查询,该值将与第 2 步中的值进行比较。

每次单击“添加”按钮时,都会在前一个用户控件下方出现一个新用户控件,我可以在其中创建 SQL 查询并生成答案。

我可以进行比较和查询数据库。没问题,我只是不确定如何在 MVC 中重用控件。

任何建议都会有所帮助, 谢谢, 乔治

【问题讨论】:

    标签: c# model-view-controller user-controls


    【解决方案1】:

    您正在尝试做的事情既有趣又复杂。我相信您已经掌握了解决方案的逻辑,因此我将专注于您提出的简单问题:“[如何] 将用户控件的多个实例添加到单个视图页面?”

    当然,有几种方法可以做到这一点。您可以使用 javascript 克隆一个 模板 html 代码块,我可能会这样做,这样我就没有回发。但是,您没有提到 javascript,因此您应该简单地将您对 RenderPartial 的调用包装在 foreach 循环中,并为循环提供增量值或列表。

    View.aspx:

    <% 
    //loop over sqlQueries in list, rendering a 
    //  partial for each and passing the query into the partial.
    foreach(var item in Model.listOfSqlQueries)
        Html.RenderPartial("sqlBox", item);
    %>     
    

    然后,在视图中有一个按钮,该按钮发布到 ViewResult 并返回相同的列表加一项。

    Controller.cs:

    public ViewResult AddQueryBox(ViewModel viewModel) 
    {
        //Add blank sql query to list
        viewModel.listOfSqlQueries.Add(new SqlQuery());
    
        //return calling view with newly updated viewmodel
        return View("View", viewModel);
    }
    

    【讨论】:

    • 好的,这是有道理的,但是假设我已经输入了一个查询并在第 1 步中收到了结果,如果我添加(通过按下按钮)第二步,那么第一个查询将被重新执行(除非我想我做一个“检查查询结果是否=真)语句。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多