从View切换DataContext

时间:2018-05-27 07:49:13

标签: c# asp.net asp.net-mvc

我正在使用一个使用2个不同数据存储的ASP.NET MVC应用程序。我为每个连接创建了2个不同的Context Clases。我已经单独发短信,两者都很好用

背景1:

public class DbContextA : DbContext
{
    public DbContextA ()
        : base("name=DbContextA ")
    {
    }

    public virtual DbSet<Producto> Productos { get; set; }
}

背景2:

public class DbContextB : DbContext
{
    public DbContextB ()
        : base("name=DbContextB ")
    {
    }

    public virtual DbSet<Producto> Productos { get; set; }
}

现在我想在视图中切换两个上下文。为此,我在视图中创建了一个DropDownList:

@using (Html.BeginForm())
{
    <p>Please select the data storage mode:</p>
    <div>
        <select id="StorageTypes" name="StorageTypes">
            <option value="1">Storage 1</option>
            <option value="2">Storage 2</option>
        </select>
        <input type="submit" value="Accept" />
    </div>
}

但我不知道如何按照我的指示进行工作,我已经从控制器尝试了如下:

    private DbContextA db1 = new DbContextA();
    private DbContextB db2 = new DbContextB();
    private string selStorageValue;

    // GET: Home
    public ActionResult Index()
    {
        if(ViewData["Context"] != null)
        {
            if (ViewData["Context"].ToString() == "1")
            {
                var context = db1;
                return View(context.Productos.ToList());
            }
            else if (ViewData["Context"].ToString() == "2")
            {
                var context = db2;
                return View(context.Productos.ToList());
            }
            else
            {
                var context = db1;
                return View(context.Productos.ToList());
            }
        } else
        {
            var context = db1;
            return View(context.Productos.ToList());
        }

    }

    [HttpPost]
    public ActionResult Index(FormCollection form)
    {
        selStorageValue = form["StorageTypes"].ToString();
        ViewData["Context"] = selStorageValue;

        return View("Index");
    }

但我不知道如何制作它。我会帮助任何帮助!

2 个答案:

答案 0 :(得分:2)

        [HttpPost]
        public ActionResult Index(FormCollection form)
        {
            private DbContextA db1 = new DbContextA();
            private DbContextB db2 = new DbContextB();
            string selStorageValue = form["StorageTypes"];
        // Assuming selStorageValue has some value.
            ViewBag.Productos = null;
            if (selStorageValue != null)
            {
                if(selStorageValue.ToString()=="1"){
                    ViewBag.Productos=db1.Productos.ToList();

                }
                else if(selStorageValue.ToString()=="2"){
                    ViewBag.Productos=db2.Productos.ToList();

                }
            }
            else{
                 ViewBag.Productos=db1.Productos.ToList();

            }
            return View(); //View must be binded

       }

查看

    @{
       ViewBag.Title = "Title";
       Layout = " layout File address";
       List<Producto> ProductoList = (List<Producto>)ViewBag.Productos;
     }

现在您在视图中有Productos列表,现在使用您希望在视图中实现它的方式。 例如,创建一个选择框

<div id="someId">
  @Html.DropDownList("Productos", 
                     new SelectList
                     (
                       ProductoList, "ProductoId", "ProductoName"
                     ), 
                     new { @class = "form-control" })

</div>

答案 1 :(得分:0)

我不确定为什么你按照自己的方式做事或者你正在努力解决的业务问题是什么,我发现知道一些背景有助于我们提供更好的帮助。 / p>

但就你的问题而言,我建议你尝试将问题分解成微小的一点。调试Index()操作时,您是否在ViewData["Context"]中获得了任何内容?如果没有,那就是第一个小问题。先解决这个问题。

一旦你克服了那个问题,就会产生下一个小问题。