Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中添加SelectListItem()类而不包括System.Web.MVC_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# 在C中添加SelectListItem()类而不包括System.Web.MVC

C# 在C中添加SelectListItem()类而不包括System.Web.MVC,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我正在从事包含ViewModels和Controller的MVC.Net项目。为什么我不使用模型,因为我使用ADO.Net而不是实体框架来连接数据库 为此,我在不同的项目中使用控制器分离ViewModels。这是我的问题, 我在使用System.Web.MVC时使用SelectListItem类,但只在我的控制器项目中安装它 以下是控制器代码段的示例: public ActionResult Index() { ViewBag.ddlistname = new L

我正在从事包含ViewModels和Controller的MVC.Net项目。为什么我不使用模型,因为我使用ADO.Net而不是实体框架来连接数据库

为此,我在不同的项目中使用控制器分离ViewModels。这是我的问题, 我在使用System.Web.MVC时使用SelectListItem类,但只在我的控制器项目中安装它

以下是控制器代码段的示例:

    public ActionResult Index()
    {
        ViewBag.ddlistname = new List<SelectListItem> {
            new SelectListItem { Text = "Anthony", Value = "1" },
            new SelectListItem { Text = "Miranda", Value = "2" },
            new SelectListItem { Text = "Jhon", Value = "3" }
        };
        ViewBag.ddlistpos = new List<SelectListItem> {
            new SelectListItem { Text = "Store Clerk", Value = "A" },
            new SelectListItem { Text = "Waiter", Value = "B" },
            new SelectListItem { Text = "Cook", Value = "C" }
        };
        var result = new CRViewModel();
        return View(result);
    }
鉴于:

@Html.DropDownListFor(model => model.EmpName,Model.EmpList )
@Html.DropDownListFor(model => model.EmpPost,Model.PosList )
但我不能,因为在我的ViewModelsVM项目中,我没有名称空间System.Web.MVC。如果我只为使用SelectListItem类而在VM项目中添加dll并包含System.Web.MVC命名空间,那将是一种浪费

如果可能,如何添加SelectListItem类而不添加整个命名空间

编辑: 根据您的请求,我添加了我的真实代码示例 这就是我的代码的工作原理

在DAL类中:

public List<SelectListItem> getcustlist()
        {
            string SQL = "select cust_name, cust_id from tbl_cust";
            List <SelectListItem> result = getdropdownfromSQL(SQL, "cust_name", "cust_id ");
            return result;
        }
public List<SelectListItem> getpostype()
        {
            string SQL = "select pos_name, pos_code from tbl_pos";
            List<SelectListItem> result = getdropdownfromSQL(SQL, "pos_name", "pos_code");
            return result;
        }

public List<SelectListItem> getdropdownfromSQL(string SQL, string Text, string Value)
        {
            string Conn = GetConn();//function to get connection string
            List<SelectListItem> result = new List<SelectListItem>();
            string errmsg;
            DataTable fetch = getdt(SQL, Conn, out errmsg);
            if (fetch == null)
                return result;
            int rowaffect = fetch.Rows.Count;
            for (int i = 0; i < rowaffect; i++)
            {
                result.Add(new SelectListItem
                {
                    Text = fetch.Rows[i][Text].ToString(),
                    Value = fetch.Rows[i][Value].ToString()
                });
            }
            return result;
        }

public DataTable getdt(string SQL, string strconn, out string errormsg)
        {
            errormsg = "";
            DataTable dt = new DataTable();
            try
            {
                using (SqlConnection conn = new SqlConnection(strconn))
                {
                    using (SqlDataAdapter da = new SqlDataAdapter(SQL, conn))
                    {
                        conn.Open();
                        da.Fill(dt);
                    }
                }
            }
            catch (Exception ex)
            {
                errormsg = ex.Message;
                return null;
            }
            return dt;
        }

如果不添加名称空间,就无法实现此行为,因为它存储了有关此类的信息

但是,您可以创建自己的select item类,并创建一个扩展方法,将类中的项转换为SelectListItem,如下所示:

public class SimpleItem
{
    public string Text { get; set; }
    public string Value { get; set; }
}
SimpleItem应存储在ViewModels和Views可以访问的部件中

在MVC项目中创建一个扩展方法:

public static class HtmlExtensions 
{
    public static MvcHtmlString LocalDropDownListFor<TModel, TProperty>(
        this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expr, 
        IEnumerable<SimpleItem> items)
    {
        return helper.DropDownListFor(expr, 
            items.Select(x => new SelectListItem { Text = x.Text, Value = x.Value } ));
    }
}
毕竟,您可以在第页简单地调用它:

@Html.LocalDropDownListFor(model => model.EmpName, Model.EmpList)

您需要添加名称空间。这样做是有道理的。它是一个视图模型,特定于System.Web.MVC中的视图。不管怎么说,名称空间正在你的应用程序中使用,所以这没有什么区别。不清楚为什么你认为这是一种浪费,因为我使用Visual Studio的Nuget包在我的项目中添加了需要访问Internet的dll。在我的工作场所,上网受到限制。我只能在这里访问内部网。虽然可以请求临时访问,但这里有点复杂,所以有很多工作要做。您使用的是MVC,因此.dll已经安装在您的计算机上-您不需要使用NugetI使用5.0 MVC,计算机最多只有4.0。假设我使用System.Web.MVC,它会出现任何错误吗?谢谢,我尝试了自己的selectlistitem方法,但没有成功。我有自己的助手扩展。将尝试它,并标记为正确,如果它工作。祝我好运,伙计,留个条子吧。我不接受这种行为。在我看来,在ViewModel中存储下拉列表值是一种很糟糕的代码,可能还有其他解决方案,正如您从注释中看到的。这不是问题,因为我将其存储在dB中,并具有调用它的函数。以身作则只是为了方便
private DAL func = new DAL();
public ActionResult Index()
{
    ViewBag.ddlistname = func.getcustlist();
    ViewBag.ddlistpos = func.getpostype();
    var result = new CRViewModel();
    return View(result);
}
public class SimpleItem
{
    public string Text { get; set; }
    public string Value { get; set; }
}
public static class HtmlExtensions 
{
    public static MvcHtmlString LocalDropDownListFor<TModel, TProperty>(
        this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expr, 
        IEnumerable<SimpleItem> items)
    {
        return helper.DropDownListFor(expr, 
            items.Select(x => new SelectListItem { Text = x.Text, Value = x.Value } ));
    }
}
@using YourProject.RequiredNamespace
@Html.LocalDropDownListFor(model => model.EmpName, Model.EmpList)