0

これにはmvc3アプリケーションがあり、2つの部分ビュー1.controls 2.webgridを使用しました

コントロール内で、実際のデータベース テーブルからドロップダウン リストを作成しています。EFの使用

index.cshtmlには、これらのドロップダウンリストから値を選択する必要がある1つのフォームがあり、挿入ボタンを押すと、これらの値は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; }
}

現在、フォームデータを挿入するデータベースの3番目のテーブルとしてSecurityIdentifierMappingを使用しています...しかし、それを「DataTable」に挿入する必要があります

4

1 に答える 1

1

DataTable オブジェクトを作成し、それに適切な DataColumn オブジェクトを割り当てる必要があります。その後、SecurityIdentifierMapping プロパティを一時データ テーブルの列にマップします。DataTable を WebGrid にマッピングすることについては、個人的に試したことがないので不可能だとは言いませんが、SecurityIdentifierMapping のコレクションにマッピングし直す必要があります。

しかし、なぜ DataTable が必要なのでしょうか? DataTable には、IQueryable または IEnumerable よりもどのような利点がありますか? この戦略を使用して実際に達成したいことは何ですか?

アップデート:

ViewModel クラス (SecurityIndentifierMappingViewModel) で既に IEnumerable を使用しています。同時に、インデックスに POST するときにデータベースにデータを保存し、インデックスの GET バージョンで再度フェッチします。

欠けているのは、ビューで 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()

上記のコードを Index ビューのどこかに配置し、独自の列を定義します。さらに、WebGrid http://apparch.wordpress.com/2012/01/04/webgrid-in-mvc3/で何ができるかについてより多くのアイデアを得るために私が書いたこの記事を見てください。

少しでもお役に立てれば幸いです。

于 2012-04-18T18:46:58.037 に答える