如何对结构相同的不同表使用相同的partialview?

时间:2019-07-20 00:26:18

标签: asp.net-mvc vb.net entity-framework model-view-controller

我正在构建一个门户网站来管理不同产品的过程设定点,每个过程Area都有许多表(结构相同,5 int,10 real)存储设定点(AreaXSetpointInfoY,Area Number X)和SetpoinIntf​​o表Y)和GeneralProductInfo表(在SQL中,所有这些都是由Entity Framework首先使用数据库链接的)。主要成就是获得一个视图来编辑GeneralInfo和指定的AreaXSetpointInfoY表。

我已经实现了以下视图,它使用了一个主视图和一个@HTML呈现的视图。现在只需要一个特定的表即可。

view to achive

由于表和区域的数量将来可能会改变,我希望至少将它们放在组合框中,并且当选择另一个AreaXSPInfoY表时,重新呈现视图的表部分。

我已经或尝试过其他方法,

  1. 具有一个ViewModel,该ViewModel可以根据Area,SPInfo,ProductID等参数进行动态绑定。

  2. 其他方法是使用存储过程,该存储过程返回所选AreaXSPInfoY表的列并将其呈现在视图中。

  3. 或者使用原始查询从所需的AreaXSPInfoY表中获取列

这些尝试的问题是:

1.a我还没有找到一种将模型动态绑定到表的方法(我知道当需要添加更多AreaXSPInfoY表时,它们应该是 添加到EF模型中

2.a我已经构建了一个存储过程来实现此目的,但是当我尝试将其用作实体的功能时,它根本没有出现在实体定义中(我已经以Function Import的形式添加到了模型中,它返回复杂类型,等等。

Public Function ProductDetailAreaXSPIY(_parameters As AreaXSPInfoXParameters) As ActionResult
    Dim model = _db.Database.GetAreaXSPInfoY(_parameters.AreaID, _parameters.SPInfoID, _parameters.ProductID)

    ViewData("Message") = "Tabla: "
    If model Is Nothing Then
        Return HttpNotFound()
    End If

    Return View(model)
End Function

这绝对可以达到目的。

3.a由于无法使用存储过程,所以我想到了对数据库使用原始查询

Public Function ProductDetailAreaXSPIY(_parameters As AreaXSPInfoXParameters) As ActionResult
    Dim _SQLquery As String = "SELECT * FROM dbo.Area" + _parameters.AreaID.ToString() + "SPInfo" + _parameters.SPInfoID.ToString() + 
            " WHERE dbo.Area" + _parameters.AreaID.ToString() + "SPInfo" + _parameters.SPInfoID.ToString() + ".ProductID = " + _parameters.ProductID.ToString()
    Dim model = _db.Database.SqlQuery(_SQLquery)

    ViewData("Message") = "Tabla: "
    If model Is Nothing Then
        Return HttpNotFound()
    End If

    Return View(model)
End Function

这里的问题是我需要指定返回查询的类型,但我不知道它是哪个或如何做。

现在上面显示的视图来自以下控制器ActionResult

' GET: SPInfo/ProductDetail/ProductID partial view for area X setpointinfo Y
Public Function ProductDetailAreaXSPIY(Optional ByVal id As Integer = 0) As ActionResult
    ViewData("Message") = "Tabla: "
    Dim model As Area1SetpointInfo1 = _db.Area1SetpointInfo1.Find(id)
    If model Is Nothing Then
       Return HttpNotFound()
    End If

    Return View(model)

End Function

0 个答案:

没有答案