在ASP.NET MVC3中批准和拒绝

时间:2013-07-10 11:17:00

标签: asp.net-mvc-3 razor

我知道这个问题并不难,但我是asp.net mvc3的新手,我不知道怎么做。

我在我的网站上创建了一个简单的CRUD功能控制器。现在,在我的编辑中,我将文本框更改为两个单选按钮“批准”和“拒绝”。现在我的问题是如何让我的编辑获得我选择的单选按钮的值?以下是我的视图>编辑中的单选按钮的值

我的视图>编辑

<div class="editor-label">
    @Html.LabelFor(model => model.Status)
</div>
<div class="editor-field">
<input type="radio" name="action" value="Approve" />Approve
<input type="radio" name="action" value="Reject"/>Reject
</div>

enter image description here

这是我的控制器中的编辑我不知道在这里修改什么.. :(

public ActionResult Edit(int id)
    {
        Leave leave = db.Leaves.Single(l => l.leave_id == id);
        return View(leave);
    }

    [HttpPost]
    public ActionResult Edit(Leave leave)
    {

        if (ModelState.IsValid)
        {
            db.Leaves.Attach(leave);
            db.ObjectStateManager.ChangeObjectState(leave, EntityState.Modified);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(leave);
    }

这是我的假期模型

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试使用Html.RadioButtonFor()帮助器:

@Html.RadioButtonFor(model => model.Status, "Approve") Approve
@Html.RadioButtonFor(model => model.Status, "Reject") Reject

而不是

<input type="radio" name="action" value="Approve" />Approve
<input type="radio" name="action" value="Reject"/>Reject

取决于您的状态类型。 如果它比博德尔的DevDave的例子应该工作正常。 如果它是字符串 - 比我的第一个例子应该没​​问题。 但是如果它是int,其中0表示Reject,1表示Approve - 你应该使用类似这样的东西:

@Html.RadioButtonFor(model => model.Status, "1") Approve
@Html.RadioButtonFor(model => model.Status, "0") Reject

答案 1 :(得分:1)

假设您对状态使用bool值:

<label for="approve">
@Html.RadioButtonFor(x => x.Status, "True", new { id = "approve" })
Approve
</label>

<label for="reject">
@Html.RadioButtonFor(x => x.Status, "False", new { id = "reject" })
Reject
</label>

编辑:公开db对象是不好的做法,您应该使用具有db对象相关属性的视图模型,然后在保存/加载时可以在两者之间进行映射。

即。返回LeavesViewModel进行查看,但在保存时将LeavesViewModel转换为db对象。

在提供的示例中,这应该直接映射到传递给Post方法的Leave对象,假设它是bool值。调试,您应该看到值返回true或false,具体取决于您选择的选项。

如果Status是一个包含两个以上(即bool)选项的Enum,它也可以工作,但我之前没有尝试过。

因此,在编辑视图中,将单选按钮和表单的其他部分包装在:

@using (Html.BeginForm("Edit", "ControllerName")) {
   ..your stuff

   <input type="submit" value="Save" />
}