所以这是代码,当我按下“开始”时,我有2个提交按钮我希望它将Datetime.now发送到开始行,当我按“停止”时,我希望它发送停止日期时间。现在到列,这应该发生在同一行。当我再次按Start时,它应生成一个新的ID 2,等等。在第二行打印开始日期。
Exampel ID 1:Start 2013-11-15 05:12 Slut:2013-11-15 05:15
问候Patrik
@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>
}
控制器 { 公共类TiderController:Controller { private 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; }
}
答案 0 :(得分:0)
默认情况下,HTML并不能很好地处理多个表单。
例如,您不能使用嵌套表单:
<form action="/GreatController/DecentAction">
<input type="submit" value="Start" />
<form action="/GoodController/ModerateAction">
<input type="submit" value="Stop" />
</form>
</form>
即使您使用两个不同的按钮,也不能让表单使用相同的数据(仅使用HTML)执行两个不同的操作。
有几种解决方法。
action
。可能性很多。答案 1 :(得分:0)
这样的事情怎么样?
<fieldset>
<legend>ArbetsTider</legend>
@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="Create" />
</p>
}
</fieldset>
将字符串属性名称“Command”添加到您的模型中,并在您的操作中,如果"model.Command" == "Start"
执行一项操作,则执行另一项操作,例如"model.Command" == "Create"
。
[HttpPost]
public ActionResult MultipleCommand(string Command)
if (model.Command == "Start")
{
//TO DO : Submit button for first row
}
else if (model.Command == "Stop");
{
//TO DO : Submit to second row
}
}
答案 2 :(得分:0)
开玩笑说:
@using (Html.BeginForm("Start"))
{
@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("Stop"))
{
@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>
}
在控制器中
[HttpPost]
public ActionResult Start(IDontKnowYourModel 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(IDontKnowYourModel model){
using(var context = new TiderDBContext()) {
context.Tider.FirstOrDefault(x => x.ID == model.ID).Slut = model.Slut;
context.SaveChanges();
}
return View("Index");
}
注意:通常在中间添加一个额外的DAL图层,就像存储库一样。我没有这样做,以保持简洁。
您应该做的就是在表单中定义它应指向的操作方法。 你的问题有点不清楚(你在同一行上的意思是什么?),所以根据你的用例,你可能需要为每个表单添加一个隐藏字段来确定你想要更新的模型的ID。