在mvc

时间:2016-08-30 15:14:15

标签: asp.net-mvc razor

我正在使用asp.net mvc。但是我无法使用Linq,因为数据库是一个externe数据库,其中包含超过2000个表。所以我不会'在项目中有db但在mysql manager 2014中。我现在用标准的sql查询数据。像这样:

public async Task<ActionResult> Index  (int? SelectedVestiging)       
{
    var query = "SELECT Code from [Verploegen TEST$Location]";
    Vestiging vestiging = await db.Vestigingen.SqlQuery(query, SelectedVestiging).FirstOrDefaultAsync();
    if (vestiging == null)
    {
        return HttpNotFound();
    }
    return View(vestiging);
}

我有一个模型,如下:

public class Vestiging
{           
    [Key]
    public string Code { get; set; }               
}

该方法正在运行。因为我看到数据出现在vestiging中。这样才行。但现在我想在视图中拥有所有的vestigingen。有五种vestigingen。

我这样试试:

@Html.DropDownList("Code", "All")

但是我会得到这个错误:

  

附加信息:具有密钥&#39;代码&#39;的ViewData项目。属于&#39; System.String&#39;但必须是&#39; IEnumerable&lt; SelectListItem&gt;&#39;。

我现在就这样:

public async Task<ActionResult> Index  (int? SelectedVestiging)       
        {


            var query = "SELECT Code, Name from [Verploegen TEST$Location]";
            Vestiging vestiging = await db.Vestigingen.SqlQuery(query, SelectedVestiging).FirstOrDefaultAsync();

            if (vestiging == null)
            {
                return HttpNotFound();
            }

            var allITems = db.Vestigingen
                 .Select(s => new SelectListItem { Value = s.Code, Text = s.Code }).ToList();
            ViewBag.WestVigs = allITems;

            return View(vestiging);



        }

和这样的观点:

  @Html.DropDownList("Code", ViewBag.WestVigs as List<SelectListItem>);

但我收到错误:

列名称无效&#39;代码&#39;。

Beschrijving:Er is een onverwerkte uitzondering opgetreden tijdens het uitvoeren van de huidige webaanvraag。 Raadpleeg de stacktracering voor meer informatie over deze fout en de oorsprong ervan in de code。

详细信息van uitzondering:System.Data.SqlClient.SqlException:列名无效&#39;代码&#39;。

Fout in bron: 


Regel 30:             }
Regel 31: 
Regel 32:             var allITems = db.Vestigingen
Regel 33:                  .Select(s => new SelectListItem { Value = s.Code, Text = s.Code }).ToList();
Regel 34:             ViewBag.WestVigs = allITems;

我仍然收到错误:

StickerPrinterWeb.DAL.Verploegen_TEST_Location: : EntityType 'Verploegen_TEST_Location' has no key defined. Define the key for this EntityType.

Locations: EntityType: EntitySet 'Locations' is based on type 'Verploegen_TEST_Location' that has no keys defined.

如果我这样做:

[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.[Verploegen TEST$Location]")]
    public partial class Verploegen_TEST_Location : INotifyPropertyChanging, INotifyPropertyChanged
    {

        private static PropertyChangingEventArgs emptyChangingEventArgs = new PropertyChangingEventArgs(String.Empty);

        private System.Data.Linq.Binary _timestamp;

        [Key]
        private string _Code;

1 个答案:

答案 0 :(得分:0)

DropDownList辅助方法希望您传递构建选择选项所需的数据。

如果您没有视图的视图模型,可以使用ViewBag从您的操作方法发送此信息。

// your existing code goes here

var allITems = db.Vestigingen
                 .Select(s=>new SelectListItem { Value =s.Code, Text= s.Code}).ToList();
ViewBag.WestVigs=allITems; 

return View(vestiging);

并在您看来,

@Html.DropDownList("WestVigs")

这将生成一个SELECT元素,其name和id值设置为&#34; WestVigs&#34;。如果您希望select元素具有不同的Id和Name值,则可以使用DropDownList方法的另一个重载。

@Html.DropDownList("Code", ViewBag.WestVigs as List<SelectListItem>);

这将生成一个SELECT元素,其名称和id值设置为&#34; Code&#34;