在视图MVC.NET中使用来自导入引用的类

时间:2017-07-12 05:35:28

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

我不确定标题是否是正确的标题,但我不认为标题更好。

经过多次搜索后,我找不到解决方案。

我是MVC.NET的新手。 我构建了一个Web应用程序并添加了一个dll引用,我想在视图中使用它。 我成功地使用了我在视图中构建的类。

模特:

using Mydll;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MyWebApplication.Models
{
    public class myClass
    {
        public VaultsOnServer vaults { get; set; }
        private MFilesServerApplication oServerApp = new 
        MFilesServerApplication();
        private MFServerConnection oVaultConnection = new 
        MFServerConnection();
        private Vault vault { get; set; }

        public bool checkIfLoginAccountExist(string i_Username)
        {
            LoginAccount loginAccount = null;
            loginAccount = 
            oServerApp.LoginAccountOperations.GetLoginAccount(i_Username);

            return loginAccount != null ? true : false;
        }

        public VaultsOnServer getAllVaults()
        {
            vaults = oServerApp.GetVaults();
            return vaults;
        }
    }
}

控制器:

using MyWebApplication.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Mydll;

namespace MyWebApplication.Controllers
{
public class HomeController : Controller
{
    myClass myclass= null;
    User user = null;
    public ActionResult Home()
    {
        return View("~/Views/Home/Login.cshtml");
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult CheckUser(User objUser)
    {
        VaultsOnServer vaults = null;
        bool ifUserExist = false;
        if (ModelState.IsValid && InputValidation.onlyLetters(objUser.Username) && InputValidation.checkPassword(objUser.Password))
        {
            if (objUser != null)
            {
                if (myclass== null)
                {
                    myclass= new myClass();
                }

                ifUserExist = mfiles.checkIfLoginAccountExist(objUser.Username);
                if(ifUserExist == true)
                {
                    user = objUser;
                    vaults = myclass.getAllVaults();
                    Session["Vaults"] = vaults;
                }
                return View("~/Views/Home/ChooseVault.cshtml", vaults);
            }
        }
        return View("~/Views/Home/Login.cshtml");
    }

    [HttpPost]
    public ActionResult Login(VaultOnServer vault)
    {
        if(user != null)
        {
            return View();
        }

        return View();
    }
  }
}

观点:

@{
    ViewBag.Title = "CooseVault";
}

<h2>CooseVault</h2>

@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
    <div id="formCheckUser">
        <fieldset id="loginAccount">
            <legend id="loginTitle">Choose Vault</legend>
            <select id="dropdownOne" name="dropdownOne">
                <option value="">--pick--</option>
                @foreach (var item in )
                {
                    <option value="@item" selected="selected">@item.Name</option>
                }
            </select>
        </fieldset>
    </div>
}

在控制器中我发送函数CheckUser来查看dll(Mydll)中类类型的对象,我想在视图中使用类类型。

我能这样做吗?

感谢

2 个答案:

答案 0 :(得分:1)

你可以通过2种方式做到这一点//首先更好

1)在网络应用程序中创建另一个类并将dll类转换为您的Web应用程序类,并在视图中使用它,如@Emad所说

public class VaultsOnServerViewModel
{
    //some props
}

return View("~/Views/Home/ChooseVault.cshtml", new VaultsOnServerViewModel(vaults));

2)通过在views文件夹的webconfig中添加命名空间来添加对视图的dll引用//不要这样做

<add namespace="Mydll" />

然后你就可以在视图中使用

@model Mydll.VaultsOnServer

@foreach (var item in Model)

3)你也可以使用字典或SelectListItem来做这个

return View("~/Views/Home/ChooseVault.cshtml", vaults.Select(s => new SelectListItem() { Text = s.Name, Value = s.Value}).ToList());

并在视野中

 @model List<SelectListItem>

@foreach (var item in Model)
                {
                    <option value="@item.Value" selected="selected">@item.Text</option>
                }

或使用DropDownListFor helper

答案 1 :(得分:0)

如果我理解你的问题,是的,你可以。

知道MVC中的每个视图都有一个与之关联的对象,称为模型。模型是您喜欢的任何类型的对象,可以通过控制器发送到视图。因此,控制器创建模型的实例并将其传递给视图,视图可以使用模型中的数据,您猜对了,查看页面。

为此,您首先在视图中声明它使用的是哪种类型的模型。您应该将此行放在.cshtml文件的顶部

@model MyNamespace.MyModelType

然后在视图的其他位置,您可以使用@Model.MyModelPropertyOne访问模型的属性并使用它们。

最后,您应该将MyModelType的实例传递给控制器​​的视图:

return View("Login", new MyModelType());

这是你需要做什么的大纲,如果不清楚请告诉我,我会尝试解释更多。