在具有网格视图功能的同一页面中多次使用相同的用户控件

Using same user control multiple times in same page with grid view functions

我正在使用用户控件来显示网格视图并且网格包含它自己的方法。

我将网格标识为 gvPastInvestment

我的问题是,当我在同一个页面中两次使用该控件时,网格 ID 重复,并且网格功能与两个用户控件不分开。

有什么方法可以识别网格,以便每次复制用户控件时它都是唯一的,并且应该能够单独控制它的功能。

<asp:GridView ID="gvPastInvestment" runat="server" 
     AutoGenerateColumns="False" ShowHeaderWhenEmpty="True" 
     DataKeyNames="ID,InvestmentCategory,ContractorCategory,Year" ShowFooter="True"
     OnRowEditing="gvPastInvestment_RowEditing" 
     OnRowCancelingEdit="gvPastInvestment_RowCancelingEdit" 
     OnRowUpdating="gvPastInvestment_RowUpdating"
     OnRowDeleting="gvPastInvestment_RowDeleting" 
     OnRowCommand="gvPastInvestment_RowCommand"
     CssClass="table table-striped table-bordered table-hover" AllowSorting="true">
     <Columns>
         ....
     </Columns>
</asp:GridView>
<Triggers>
     <asp:AsyncPostBackTrigger ControlID="gvPastInvestment" />
</Triggers>

很久以前在学校有 .NET 的背景,知道有一些限制,并且不知道这里的一切是如何分解的,比如 Core 的开放程度,或者 .NET 的更新版本将允许,因为他们试图使它们更像开源语言和框架友好,就像他们在代码中的 Node.js pkg,使用它,没关系。我有一个理论,但你如何将你的数据 AJAX 提供给 /api/ 或外部酒吧 api,EF,它是 XML 还是 JSON?

我猜你正在使用 Async,请原谅我的过程,已经有一段时间了,当我学习 C# 时,我直接使用 SQL 和 IIS 和 EF,任何远离 Async 的东西都在做 jQuery 的 .ajax 调用,对吧?有一阵子了。无论如何,我承认我不是绝对信任这个词,但更多来自 angular 和 ES5-'7' 背景,

主要是我的想法: 我会想出一种方法来创建我自己的道具,你可以基于 id 模板,有一个 js 逻辑,在一个自调用的 fn 中,类似的东西。

var randomness = use a salt or a generator here 
var salted = salt algorithm + something else for added security.
var randoIdNumber = randomness + salted * 95834959834; 

(或者无论您想要制作随机更改加密或解密等的脚本多么复杂或容易),然后将其添加到全局名称空间之外的同一范围内,将 http post 添加到 list.json 或 /api/genNumbers 为您以前使用的 ID 创建以进行检查。 ** 请记住此外,您必须将这些想法混在一起,并考虑可能的垃圾收集或效率,只需替换以前的 var 或保留它并添加 'let' 以停止如果您是企业级且项目很大,则该列表会在列表中增长。 <-- 请记住,我在下面输入了这一点,很抱歉现在是凌晨 4 点。

或者用所有这些制作一个 JS class。并在您可以发挥作用的范围内制作某种列表和清单或 JS 数组 kv。在你的 ASP.NET 中给定

id= "{ randomId.id }"
或作为 angular class ng-class="ref to logic or just make it ugly and do it here var randomGvId = random generator " 可以有一个异步和随机化的模板值(无论如何,以上只是一些粗略的想法按照我的想法)然后

将即将成为 "random" 的最新 ID 添加到之前生成或显示的 ID 的列表中,以确保它不会滚动使用相同的组合或只是使用不同的命名约定,您可以确保逻辑检查 'id' 之前是否已分配或正在使用,这与使用 angular 和 javascript 执行这些类型的操作的方式类似。我会朝那个方向思考。我会回去重温我的 .NET,自从 4.5 出来,获得了认证,但进入了指令和注入的 js 框架世界,我确信它现在在 .NET 中是非常标准的。如果您对我的意思感到好奇,请告诉我,我会为您提供一些代码。这是一个粗略的粗略'answer',它更多的是对你的思维过程的一个暗示性想法。如果您不知道如何去做,我很乐意帮助您集思广益,然后返回并在我的代码中找到一个与我在项目中所做的类似事情的实例,这可能会给您一个更好的主意.不知道 .NET 是否完全不允许这样做。但它现在部分开源。我打赌我能在你的堆栈中找到 运行 的东西。你使用 angular 或 angular 2,KO,backbone 或任何主要的 JS - MV*/MVC 框架?

"{ scriptData.randomid }" or randid=" " in props/attributes

警告,有人会为你更好地回答这个问题,但我想给你一些我在我的世界中使用的想法,这些想法已经有一段时间没有使用 .NET 了:

这是一个有点半生不熟的想法,因为你还必须确保它不会在新 ID 出现后添加更多 GV,即使你可以在 VS 中编辑更改 ID 名称,但它们只是有独一无二,任何时候你想要。我不知道 MS 是否有不同的想法,当它是实时的以及它如何呈现在 运行 时间。如果有模板化的数字,也许只是也许看看它在 运行 时间首先呈现的内容,或者研究是否可以添加自己的 property/attribute 因为这会删除我写的前百万行并忘记它,它在包里有几行代码然后用idea,

<asp:WHATEVER ID="{ templatedRandoNumIdorGuid }" or leave id="" the same thing or blank if you can, and add like name="{ randomValue }" myRandomId="{ randomValue }" ng-class or ng-model or ng-bind ="{ randomValue }"

哈哈,我警告过你它是半熟的,但如果你可以自定义 props/attributes 或使 id= value 成为注入的生成值,这将是一个很好的解决方法。以上不是最好的方法。我已经看到一些永远不应该说的话,哈哈,但可能会帮助您理解我想要表达的意思。

用户控件将处理 Id, 它会创建唯一的 ID,以便它可以识别自己。

之前没有处理因为AllowSorting="true" 属性未添加到网格, 一旦我添加了它,用户控制就做了需要做的事情。