0

これがコードです。「開始」を押すと2つの送信ボタンがあり、Datetime.nowを開始行に送信し、「停止」を押すと停止datetime.nowを列、これは同じ行で発生する必要があります。そして、もう一度[開始]を押すと、新しいID 2などが生成され、2行目に開始日が出力されます。

例 ID 1 : 開始 2013-11-15 05:12 痴女 : 2013-11-15 05:15

こんにちはパトリック

    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
        <div class="editor-label">
            @Html.LabelFor(model => model.Start)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.Start, new { style = "display: none;", @Value = @DateTime.Now })
            @Html.ValidationMessageFor(model => model.Start)
        </div>
         <p>
            <input type="submit" name="@Html.NameFor(x => x.Command)" value="Start" formaction="/tider/create" />
        </p>

    }
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)
        <div class="editor-label">
            @Html.LabelFor(model => model.Slut)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.Slut, new { @Value = @DateTime.Now })
            @Html.ValidationMessageFor(model => model.Slut)
        </div>
        <p>
            <input type="submit" name="@Html.NameFor(x => x.Command)"  value="Stop" />
        </p>
    }
</fieldset>

            <div class="editor-label">
                @Html.LabelFor(model => model.Slut)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.Slut, new { @Value = @DateTime.Now })
                @Html.ValidationMessageFor(model => model.Slut)
            </div>

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

コントローラー { public class TiderController : コントローラー { プライベート TiderDBContext db = new TiderDBContext();

        //
        // GET: /Tider/

        public ActionResult Index()
        {
            return View(db.Tider.ToList());
        }

        //
        // GET: /Tider/Details/5

        public ActionResult Details(int id = 0)
        {
            ArbetsTider arbetstider = db.Tider.Find(id);
            if (arbetstider == null)
            {
                return HttpNotFound();
            }
            return View(arbetstider);
        }

        //
        // GET: /Tider/Create

        public ActionResult Create()
        {
            return View();
        }

        //
        // POST: /Tider/Create

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(ArbetsTider arbetstider)
        {
            if (ModelState.IsValid)
            {
                db.Tider.Add(arbetstider);
                db.SaveChanges();

            }

            return View(arbetstider);
        }

        //
        // GET: /Tider/Edit/5

        public ActionResult Edit(int id = 0)
        {
            ArbetsTider arbetstider = db.Tider.Find(id);
            if (arbetstider == null)
            {
                return HttpNotFound();
            }
            return View(arbetstider);
        }

        //
        // POST: /Tider/Edit/5

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(ArbetsTider arbetstider)
        {
            if (ModelState.IsValid)
            {
                db.Entry(arbetstider).State = EntityState.Modified;

               return RedirectToAction("Index");
            }
            return View(arbetstider);
        }

        //
        // GET: /Tider/Delete/5

        public ActionResult Delete(int id = 0)
        {
            ArbetsTider arbetstider = db.Tider.Find(id);
            if (arbetstider == null)
            {
                return HttpNotFound();
            }
            return View(arbetstider);
        }

        //
        // POST: /Tider/Delete/5

        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            ArbetsTider arbetstider = db.Tider.Find(id);
            db.Tider.Remove(arbetstider);
            db.SaveChanges();
           return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }

        [HttpPost]
        public ActionResult Start(ArbetsTider model)
        {
            using (var context = new TiderDBContext())
            {
                context.Tider.FirstOrDefault(x => x.ID == model.ID).Start = model.Start;
                context.SaveChanges();
            }
            return View("Index");
        }

        [HttpPost]
        public ActionResult Stop(ArbetsTider model)
        {
            using (var context = new TiderDBContext())
            {
                context.Tider.FirstOrDefault(x => x.ID == model.ID).Slut = model.Slut;
                context.SaveChanges();
            }
            return View("Index");
        }
    }
}

モデル

public class ArbetsTider
{
    public int ID { get; set; }
    public DateTime Start { get; set; }
    public DateTime Slut { get; set; }

}

public class TiderDBContext : DbContext
{
    public DbSet<ArbetsTider> Tider { get; set; }
}
4

1 に答える 1

0

ページ全体を更新せずに 1 つのフォームを部分的に送信するには、Ajax メソッドを使用する必要があります。

次のようなことを試してください:

このような最初の変更(type = 'submit'を削除):

@using (Html.BeginForm("Create", "Tider", FormMethod.Post, new { @id= "formStart" } ))
    {
// html code
    <input id="submittStartDate" name="@Html.NameFor(x => x.Command)" value="Start" class="submitButton" />
});

@using (Html.BeginForm("Stop", "Tider", FormMethod.Post, new { @id= "formStop" } ))
{
//html 
    <input id="stop" name="@Html.NameFor(x => x.Command)"  value="Stop" class="submitButton" />
//html 
});

次に、JavaScript ファイルに関数を追加します。

$(document).ready(function () {
   $("input.submitButton").click(function() {
      SubmitForm(this);
   });
});

function SubmitForm(input) {
   var url = "";
   var formData = "";

   if(input[0].id == "formStart")
   {
      url = "../Tider/Create";
      data = $('form#formStart').serialize();
   }
   else if(input[0].id == "formStop") {
      url = "../Tider/Stop";
      data = $('form#formStop').serialize();
   }

   $.ajax({
       type: "POST",
       url: url,
       data: data,
       success: function (result) {
          // Do your stuff here
       },
       error: function () {
         alert("Error in saving");
       }
    });
}

C# メソッドの Create と Stop の戻り値の型を必要な型 (ここでは int が必要だと思います) に変更し、それを返す必要があります。そして、Ajax 呼び出しのデータ「成功」関数を取得します。

于 2014-07-21T05:14:22.240 に答える