C# 在视图MVC.NET中使用导入引用中的类
我不确定这个标题是否合适,但我不认为有更好的标题 经过多次搜索,我没有找到解决办法 我是MVC.NET的新手。 我构建了一个web应用程序并添加了一个dll引用,我想在视图中使用它。 我成功地使用了我在视图中构建的类 模型:C# 在视图MVC.NET中使用导入引用中的类,c#,asp.net-mvc,asp.net-mvc-4,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 {
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();
}
}
}
return View("Login", new MyModelType());
观点:
@{
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>
}
@{
ViewBag.Title=“CooseVault”;
}
库塞瓦特
@使用(Html.BeginForm(“Login”、“Home”、FormMethod.Post))
{
选择保险库
--挑--
@foreach(中的var项目)
{
@项目名称
}
}
在控制器中,我发送了函数CheckUser来查看dll(Mydll)中类类型的对象,我想在视图中与类类型一起使用
我可以这样做吗
谢谢如果我正确理解你的问题,是的,你可以 知道MVC中的每个视图都有一个与之关联的对象,称为模型。模型是您喜欢的任何类型的对象,可以通过控制器发送到视图。因此,控制器创建模型的一个实例并将其传递给视图,视图可以使用模型中的数据来查看页面 为此,您首先在视图中声明它使用的模型类型。您应该将这一行放在
.cshtml
文件的顶部
@model MyNamespace.MyModelType
然后在视图中的其他位置,您可以使用@Model.MyModelPropertyOne
访问模型的属性并使用它们
最后,您应该将MyModelType
的实例从控制器传递到视图:
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();
}
}
}
return View("Login", new MyModelType());
这是你需要做什么的大纲,如果不清楚,请告诉我,我会尝试解释更多 你可以通过两种方式来做到这一点//第一种更好 1) 在web app中创建另一个类,并将dll类转换为您的web app类,并在视图中以@Emad sayed的形式使用它
public class VaultsOnServerViewModel
{
//some props
}
return View("~/Views/Home/ChooseVault.cshtml", new VaultsOnServerViewModel(vaults));
2) 通过在视图的webconfig文件夹中添加命名空间,将dll引用添加到视图//请勿执行此操作
<add namespace="Mydll" />
及
3) 您也可以使用dictionary或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>
}
@型号列表
@foreach(模型中的var项目)
{
@项目.案文
}
或者使用dropdownlistforhelper“MyNamespace”是指MyWebApplication,而“MyModelType”是指mydll?mydll它不是我的dll,不管怎样,我尝试了你的建议,得到了一条错误消息“找不到类型或名称空间名称‘mydll’(你是否缺少using指令或程序集引用?)
MyNamespace.MyModelType
是mydll
中类型的完全限定名。无法转换dll类。你的意思是复制课堂?如果没有,请详细解释。@tal_sshh,您可能不会复制所有dll类,只复制视图中需要的内容。在ChooseSault视图中,您只需要值和名称,也可以使用SelectListItem而无需创建class@tal_sshh,请检查第三种方式。Vault不包含“选择”选项。@tal\u sshh请提供Vault服务器的定义,以及要在“选择”列表中使用的列表显示数据或它们的属性是什么?为什么需要此对象(Vault OnServer)以及其中包含什么?