ASP.NET MVC コントロールヘルプ
スキャフォールディング : Input

ASP.NET MVCのComponentOne Inputコントロールをスキャフォールディングする手順は、次のとおりです。

  1. データソースを設定します。アプリケーションでのデータソースの設定方法については、トピック「ASP.NET MVCコントロールのスキャフォールディング」を参照してください。
  2. ソリューションエクスプローラーで、プロジェクト名を右クリックし、[追加]→[新規スキャフォールディングアイテム]を選択します。[スキャフォールディングを追加]ウィザードが表示されます。

  3. [スキャフォールディングを追加]ウィザードで、[共通]を選択し、右ペインからC1 スキャフォールダーを選択します。


    [共通]→[MVC]→[コントローラー]、または[共通]→[MVC]→[ビュー]を選択し、C1 スキャフォールダーを選択して、コントローラーまたはビューだけを追加することもできます。

  4. [追加]をクリックします。

  5. Inputコントロールを選択し、[次へ]を選択します。


    [C1 ASP.NET MVC Input]ウィザードが表示され、デフォルトで[全般]タブが選択されます。

  6. [全般]タブで、モデルを次のように指定します。

    1. [コントローラー名]を入力します。
    2. ドロップダウンリストから[モデルクラス]を選択します。リストには、手順1で追加したC1NWind.edmxモデルに加えて、アプリケーションで使用できるすべてのモデルタイプが表示されます。この例では、[製品]を選択して、Inputコントロールに製品を挿入します。
    3. ドロップダウンリストから[データコンテキストクラス]を選択します。この例では、C1NWindEntitiesを選択します。
  7. [フィールド]タブに移動し、Inputコントロールのフィールドを指定します。デフォルトでは、[フィールドの自動生成]がオンになっています。オフにすると、フィールドを追加および削除したり、最終的なビューに表示する順序になるように上下に移動することができます。この例では、次の図に示すようにフィールドを選択します。

  8. [追加]をクリックします。選択したモデルのコントローラーと5つのビュー(Create、Delete、Details、Edit、Index)がプロジェクトに追加されます。コントローラーに生成されるコードは、次のとおりです。
    Input1Controller.cs
    コードのコピー
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using C1.Web.Mvc;
    using C1.Web.Mvc.Serializition;
    using System.Web;
    using System.Data;
    using System.Web.Mvc;
    using System.Data.Entity;
    // このコードは、C1スキャフォールダによって生成しました。
    namespace C1MvcWebAppScaffolding.Controllers
    {
    public partial class Input2Controller : Controller
    {
    private C1MvcWebAppScaffolding.Models.
    C1NWindEntities db = new C1MvcWebAppScaffolding.
    Models.C1NWindEntities();
    public ActionResult Index()
    {
    var model = db.Products;
    return View(model);
    }
    
    public ActionResult Details(int key1)
    {
    var model = db.Products.Find(key1);
    if (model == null)
    {
    return HttpNotFound();
    }
    return View(model);
    }
    public ActionResult Create()
    {
    return View();
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include =
    "ProductID,ProductName,SupplierID,CategoryID,
    QuantityPerUnit,UnitPrice,UnitsInStock,
    UnitsOnOrder,ReorderLevel,Discontinued")]
    C1MvcWebAppScaffolding.Models.Product product)
    {
    if (ModelState.IsValid)
    {
    db.Products.Add(product);
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    return View(product);
    }
    public ActionResult Edit(int key1)
    {
    var model = db.Products.Find(key1);
    if (model == null)
    {
    return HttpNotFound();
    }
    
    return View(model);
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include =
    "ProductID,ProductName,SupplierID,CategoryID,
    QuantityPerUnit,UnitPrice,UnitsInStock,
    UnitsOnOrder,ReorderLevel,Discontinued")]
    C1MvcWebAppScaffolding.Models.Product product)
    {
    if (ModelState.IsValid)
    {
    db.Entry(product).State = EntityState.Modified;
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    return View(product);
    }
    public ActionResult Delete(int key1)
    {
    var model = db.Products.Find(key1);
    if (model == null)
    {
    return HttpNotFound();
    }
    return View(model);
    }
    [HttpPost, ActionName("Delete")]
    [ValidateAntiForgeryToken]
    public ActionResult DeleteConfirmed(int key1)
    {
    var model = db.Products.Find(key1);
    db.Products.Remove(model);
    db.SaveChanges();
    return RedirectToAction("Index");
    }
    protected override void Dispose(bool disposing)
    {
    if (disposing)
    {
    db.Dispose();
    }
    base.Dispose(disposing);
    }
    }
    }
    

    5つのビューに対して生成されるコードは、次のようになります。

    HTML Helpers

    Create.cshtml
    コードのコピー
    @using C1.Web.Mvc
    @using C1.Web.Mvc.Fluent?
    @model C1MvcWebAppScaffolding.Models.Product
    <script>
    function timeChanged(sender) {
    var date = sender.value;
    var hour = date.getHours();
    var min = date.getMinutes();
    var second = date.getSeconds();
    var inputDate = wijmo.Control.getControl
    ("#inputDateFor" + sender.hostElement.id);
    inputDate.value.setHours(hour);
    inputDate.value.setMinutes(min);
    inputDate.value.setSeconds(second);
    inputDate.refresh();
    }
    </script>
    @using (Html.BeginForm())
    {
    @Html.AntiForgeryToken()
     
    <div class="form-horizontal">
    <h4>Product</h4>
    <hr />
    @Html.ValidationSummary(true, "",
    new { @class = "text-danger" })
    <div class="form-group">
    @Html.LabelFor(model => model.ProductID,
    htmlAttributes: new { @class =
    "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputNumberFor(model =>
    model.ProductID).Required(false)
    @Html.ValidationMessageFor(model =>
    model.ProductID, "", new
    { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.ProductName,
    htmlAttributes: new { @class =
    "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputMaskFor(model =>
    model.ProductName)
    @Html.ValidationMessageFor(model =>
    model.ProductName, "",
    new { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.QuantityPerUnit,
    htmlAttributes: new { @class =
    "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputMaskFor(model =>
    model.QuantityPerUnit)
    @Html.ValidationMessageFor(model =>
    model.QuantityPerUnit, "",
    new { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.UnitPrice,
    htmlAttributes: new { @class =
    "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputNumberFor(model =>
    model.UnitPrice).Required(false)
    @Html.ValidationMessageFor(model =>
    model.UnitPrice, "",
    new { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.UnitsInStock,
    htmlAttributes: new
    { @class = "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputNumberFor(model =>
    model.UnitsInStock).Required(false)
    @Html.ValidationMessageFor(model =>
    model.UnitsInStock, "",
    new { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.UnitsOnOrder,
    htmlAttributes:
    new { @class = "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputNumberFor(model =>
    model.UnitsOnOrder).Required(false)
    @Html.ValidationMessageFor(model =>
    model.UnitsOnOrder, "",
    new { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    <div>
    <input type="submit" value="Create"/>
    </div>
    </div>
    </div>
    }
    <div>
    @Html.ActionLink("Back to List", "Index")
    </div>
    
    Delete.cshtml
    コードのコピー
    @using C1.Web.Mvc
    @using C1.Web.Mvc.Fluent
    @model C1MvcWebAppScaffolding.Models.Product
    <h3>Are you sure you want to delete this?</h3>
    <div>
    <h4>Product</h4>
    <hr />
    <dl class="dl-horizontal">
    <dt>
    @Html.DisplayNameFor(model => model.ProductName)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.ProductName)
    </dd>
    <dt>
    @Html.DisplayNameFor(model => model.QuantityPerUnit)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.QuantityPerUnit)
    </dd>
    <dt>
    @Html.DisplayNameFor(model => model.UnitPrice)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.UnitPrice)
    </dd>
    <dt>
    @Html.DisplayNameFor(model => model.UnitsInStock)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.UnitsInStock)
    </dd>
    <dt>
    @Html.DisplayNameFor(model => model.UnitsOnOrder)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.UnitsOnOrder)
    </dd>
    </dl>
    @using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    <div class="form-actions no-color">
    <input type="submit" value="Delete" class="btn btn-default" /> |
    @Html.ActionLink("Back to List", "Index")
    </div>
    }
    </div>
    
    Details.cshtml
    コードのコピー
    @using C1.Web.Mvc
    @using C1.Web.Mvc.Fluent
    @model C1MvcWebAppScaffolding.Models.Product
    <div>
    <h4>Product</h4>
    <hr />
    <dl class="dl-horizontal">
    <dt>
    @Html.DisplayNameFor(model => model.ProductName)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.ProductName)
    </dd>
    <dt>
    @Html.DisplayNameFor(model => model.QuantityPerUnit)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.QuantityPerUnit)
    </dd>
    <dt>
    @Html.DisplayNameFor(model => model.UnitPrice)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.UnitPrice)
    </dd>
    <dt>
    @Html.DisplayNameFor(model => model.UnitsInStock)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.UnitsInStock)
    </dd>
    <dt>
    @Html.DisplayNameFor(model => model.UnitsOnOrder)
    </dt>
    <dd>
    @Html.DisplayFor(model => model.UnitsOnOrder)
    </dd>
    </dl>
    </div>
    <p>
    @Html.ActionLink("Edit", "Edit",
    new {key1=Model.ProductID}) |
    @Html.ActionLink("Back to List", "Index")
    </p>
    
    Edit.cshtml
    コードのコピー
    @using C1.Web.Mvc
    @using C1.Web.Mvc.Fluent
    @model C1MvcWebAppScaffolding.Models.Product
    <script>
    function timeChanged(sender) {
    var date = sender.value;
    var hour = date.getHours();
    var min = date.getMinutes();
    var second = date.getSeconds();
    var inputDate = wijmo.Control.getControl
    ("#inputDateFor" + sender.hostElement.id);
    inputDate.value.setHours(hour);
    inputDate.value.setMinutes(min);
    inputDate.value.setSeconds(second);
    inputDate.refresh();
    }
    </script>
    @using (Html.BeginForm())
    {
    @Html.AntiForgeryToken()
     
    <div class="form-horizontal">
    <h4>Product</h4>
    <hr />
    @Html.ValidationSummary(true, "", new
    { @class = "text-danger" })
    @Html.HiddenFor(model => model.ProductID)
    <div class="form-group">
    @Html.LabelFor(model => model.ProductName,
    htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputMaskFor(model => model.ProductName)
    @Html.ValidationMessageFor(model =>
    model.ProductName, "", new
    { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.QuantityPerUnit,
    htmlAttributes:
    new { @class = "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputMaskFor(model =>
    model.QuantityPerUnit)
    @Html.ValidationMessageFor(model =>
    model.QuantityPerUnit, "", new
    { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.UnitPrice,
    htmlAttributes: new { @class =
    "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputNumberFor(model =>
    model.UnitPrice).Required(false)
    @Html.ValidationMessageFor(model =>
    model.UnitPrice, "", new
    { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.UnitsInStock,
    htmlAttributes: new { @class =
    "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputNumberFor(model =>
    model.UnitsInStock).Required(false)
    @Html.ValidationMessageFor(model =>
    model.UnitsInStock, "",
    new { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    @Html.LabelFor(model => model.UnitsOnOrder,
    htmlAttributes: new { @class =
    "control-label col-md-2" })
    <div class="col-md-10">
    @Html.C1().InputNumberFor(model =>
    model.UnitsOnOrder).Required(false)
    @Html.ValidationMessageFor(model =>
    model.UnitsOnOrder, "",
    new { @class = "text-danger" })
    </div>
    </div>
    <div class="form-group">
    <div>
    <input type="submit" value="Save"/>
    </div>
    </div>
    </div>
    }
    <div>
    @Html.ActionLink("Back to List", "Index")
    </div>
    
    Index.cshtml
    コードのコピー
    @using C1.Web.Mvc
    @using C1.Web.Mvc.Fluent
    @model IEnumerable<C1MvcWebAppScaffolding.
    Models.Product>
    <p>
    @Html.ActionLink("Create New", "Create")
    </p>
    <table class="table">
    <tr>
    <th>
    @Html.DisplayNameFor(model => model.ProductName)
    </th>
    <th>
    @Html.DisplayNameFor(model => model.QuantityPerUnit)
    </th>
    <th>
    @Html.DisplayNameFor(model => model.UnitPrice)
    </th>
    <th>
    @Html.DisplayNameFor(model => model.UnitsInStock)
    </th>
    <th>
    @Html.DisplayNameFor(model => model.UnitsOnOrder)
    </th>
    <th></th>
    </tr>
    @foreach (var item in Model) {
    <tr>
    <td>
    @Html.DisplayFor(model => item.ProductName)
    </td>
    <td>
    @Html.DisplayFor(model => item.QuantityPerUnit)
    </td>
    <td>
    @Html.DisplayFor(model => item.UnitPrice)
    </td>
    <td>
    @Html.DisplayFor(model => item.UnitsInStock)
    </td>
    <td>
    @Html.DisplayFor(model => item.UnitsOnOrder)
    </td>
    <td>
    @Html.ActionLink("Edit", "Edit", new
    {key1=item.ProductID}) |
    @Html.ActionLink("Details", "Details",
    new {key1=item.ProductID}) |
    @Html.ActionLink("Delete", "Delete",
    new {key1=item.ProductID})
    </td>
    </tr>
    }
    </table>
    
  9. プロジェクトを実行します。