我不确定标题是否是正确的标题,但我不认为标题更好。
经过多次搜索后,我找不到解决方案。
我是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)中类类型的对象,我想在视图中使用类类型。
我能这样做吗?感谢
答案 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());
这是你需要做什么的大纲,如果不清楚请告诉我,我会尝试解释更多。