0

我有 mvc3 应用程序,我使用了两个部分视图 1.controls 2.webgrid

在控件内部,我正在从实际的数据库表中填充下拉列表。使用英孚

在 index.cshtml 上,我有一个表单需要从这些下拉列表中选择值,当按下插入按钮时,这些值必须转到 Temp“DataTable”并在 webgrid 中显示...我是 MVC3 的新手,并且不知道该怎么做。

Controls.cshtml
@model Mapping.Models.SecurityIdentifierMappingViewModel
@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Mapping</legend>
        <div class="editor-label">
            @Html.Label("Pricing SecurityID")
        </div>
        <div class="editor-field">
            @Html.HiddenFor(model => model.MappingControls.Id)
            @Html.DropDownListFor(model => model.MappingControls.PricingSecurityID,
         new SelectList(Model.PricingSecurities, "Value", "Text"),
         "Select SecurityID"
            )
            @Html.ValidationMessageFor(model => model.MappingControls.PricingSecurityID)
        </div>
        <div class="editor-label">
            @Html.Label("CUSIP ID")
        </div>
        <div class="editor-field">
            @Html.DropDownListFor(model => model.MappingControls.CUSIP,
         new SelectList(Model.CUSIPs, "Value", "Text"),
            "Select CUSIP"
            )
            @Html.ValidationMessageFor(model => model.MappingControls.CUSIP)
        </div>

        <div class="editor-label">
            @Html.Label("Calculation")
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.MappingControls.Calculation)
            @Html.ValidationMessageFor(model => model.MappingControls.Calculation)
        </div>
        <p>
            <input id="btnsubmit" type="submit" value="Insert" />

        </p>
    </fieldset>
}

HomeController.cs
public class HomeController : Controller
    {
        //
        // GET: /Home/

        mydataEntities dbContext = new mydataEntities();
        DataRepository objRepository = new DataRepository();

        //GET

        public ActionResult Index(string userAction , int uid = 0)
        {
            var mappingobj = new SecurityIdentifierMappingViewModel();
            mappingobj.MappingWebGridList = dbContext.SecurityIdentifierMappings.ToList();

                mappingobj.MappingControls = new SecurityIdentifierMapping();
                mappingobj.MappingControls.PricingSecurityID = 0;
                mappingobj.MappingControls.CUSIP = string.Empty;

            mappingobj.PricingSecurities = objRepository.GetPricingSecurityID();
            mappingobj.CUSIPs = objRepository.GetCUSIP();

            return View(mappingobj);
        }


        //POST

        [HttpPost]
        public ActionResult Index(SecurityIdentifierMappingViewModel objModel)
        {


            if (objModel.MappingControls.Id > 0)
            {
                if (ModelState.IsValid)
                {
                    dbContext.Entry(objModel.MappingControls).State = EntityState.Modified;
                    try
                    {
                        dbContext.SaveChanges();
                        //objModel = new SecurityIdentifierMappingViewModel();
                        //return RedirectToAction("Index", "Home");
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        throw;
                    }
                }

            }

            //insert code
            else
            {
                if (ModelState.IsValid)
                {
                    dbContext.SecurityIdentifierMappings.Add(objModel.MappingControls);
                    try
                    {
                        dbContext.SaveChanges();
                    }
                    catch (System.Data.Entity.Validation.DbEntityValidationException ex)
                    {
                        throw;
                    }
                }

            }

            return RedirectToAction("Index");
        }
    }

public class SecurityIdentifierMappingViewModel
{
    public IEnumerable<SecurityIdentifierMapping> MappingWebGridList { get; set; }
    public SecurityIdentifierMapping MappingControls { get; set; }

    public List<SelectListItem> PricingSecurities { get; set; }
    public List<SelectListItem> CUSIPs { get; set; }
}

目前使用 SecurityIdentifierMapping 作为数据库中的第三个表,其中插入我的表单数据......但需要将其插入“DataTable”

4

1 回答 1

1

您必须创建一个 DataTable 对象并为其分配适当的 DataColumn 对象。之后,将您的 SecurityIdentifierMapping 属性映射到临时数据表中的列。至于将 DataTable 映射到 WebGrid,我不会说这是不可能的,因为我从未亲自尝试过这个东西,但是您必须将它映射回 SecurityIdentifierMapping 的集合。

但是,为什么需要 DataTable?与 IQueryable 或 IEnumerable 相比,DataTable 有哪些可能的优势?您真正想使用此策略实现什么目标?

更新:

您已经在 ViewModel 类 (SecurityIndentifierMappingViewModel) 中使用了 IEnumerable。同时,您在 POST 到 Index 时将数据存储在数据库中,并在 GET 版本的 Index 中再次获取。

您缺少的是在您的视图中创建一个 WebGrid 对象。您的视图可以这样定义:

@{
    var columns = new List<string>();
    columns.Add("Column 1");
    columns.Add("Column 2");

    var grid = new WebGrid(model: Model.MappingWebGridList, columnNames: columns);
 }

 @grid.GetHtml()

将上面的代码放在您的索引视图中的某个位置,并定义您自己的列。另外,看看我写的这篇文章,以获得更多关于 WebGrid 可以做什么的想法http://apparch.wordpress.com/2012/01/04/webgrid-in-mvc3/

我希望我能至少对你有所帮助。

于 2012-04-18T18:46:58.037 回答