0

"Create View"2 つのテーブルに同時にデータを挿入できるように、厳密に型指定されたものを作成しようとしています。ただし、ビューを作成すると、テーブルのフィールドがモデルに含まれません。これを行う正しい方法は何ですか?

私のテーブルモデル:

public partial class CanaClie0012
    {
        public string Client00130012 { get; set; }
        public string F1Pais00200012 { get; set; }
        public string F1Cana02530012 { get; set; }
        public string Direcc0012 { get; set; }
        public Nullable<System.DateTime> TmStmp0012 { get; set; }
    }

public partial class Clientes0013
    {
        public string Client0013 { get; set; }
        public string Nombre0013 { get; set; }
        public string F1Pais00200013 { get; set; }
    }

2 つのテーブルを結合するカスタム モデルは次のとおりです。

public class ClientModel
{
    public IQueryable<CanaClie0012> CanaClie0012 { get; set; }
    public IQueryable<Clientes0013> Clientes0013 { get; set; }
}

私のコントローラー:(これが正しいかどうかはよくわかりません)

[HttpPost]
public ActionResult ClientCreate(CanaClie0012 canaclie0012, Clientes0013 clientes0013)
{
    ClientModel vm = new ClientModel();
    if (ModelState.IsValid)
    {
        db.CanaClie0012.Add(canaclie0012);
        db.SaveChanges();
        db.Clientes0013.Add(clientes0013);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(vm);
}

私の見解:

@model MvcApplication1.Models.ClientModel

@{
    ViewBag.Title = "ClientCreate";
}

<h2>ClientCreate</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>ClientModel</legend>

        <div class="editor-label">
            Client Name
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Client00130012)
            @Html.ValidationMessageFor(model => model.Client00130012)
        </div>
        <div class="editor-label">
            Pais
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.F1Pais00200012)
            @Html.ValidationMessageFor(model => model.F1Pais00200012)
        </div>
        <div class="editor-label">
            Address 
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Direcc0012)
            @Html.ValidationMessageFor(model => model.Direcc0012)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Nombre0013)
            @Html.ValidationMessageFor(model => model.Nombre0013)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
4

1 に答える 1

1

ClientModel大きな問題の 1 つは、ビューがクラスに対して強く型付けされていることです。このクラスには、ビューで参照しているメンバーは含まれません。代わりに、そのクラスには、それらのメンバーを含むオブジェクトのリストが含まれます。この時点では、ビューはおそらくコンパイルさえしていません。

ClientModel次のようにクラスを変更してみてください。

public class ClientModel
{
  public CanaClie0012 CanaClie0012 { get; set; }
  public Clientes0013 Clientes0013 { get; set; }
}

次に、ビューは次のようなメンバーを参照します。

<div class="editor-label">
  Client Name
</div>
<div class="editor-field">
  @Html.EditorFor(model => model.CanaClie0012.Client00130012)
  @Html.ValidationMessageFor(model => model.CanaClie0012.Client00130012)
</div>

あなたのメンバーのメンバーについても同様ですClientes0013

db.SaveChanges();もう 1 つ:コントローラーで 2 回呼び出す必要はありません。代わりに、両方のテーブルに挿入して、1 回の保存を行います。

db.CanaClie0012.Add(canaclie0012);
db.Clientes0013.Add(clientes0013);
db.SaveChanges();
于 2013-06-10T18:23:24.297 に答える