【问题标题】:Approve and Reject in ASP.NET MVC3ASP.NET MVC3 中的批准和拒绝
【发布时间】:2013-07-10 11:16:59
【问题描述】:

我知道这个问题并不难,但我是 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>

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

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);
    }

这是我离开的模型

【问题讨论】:

  • 显示您的休假课程的外观
  • Status的类型是什么?
  • 起初我为它使用了一个文本框,所以我将 varchar 指定为它的类型,无论如何该类型对我来说并不重要。

标签: asp.net-mvc-3 razor


【解决方案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

【讨论】:

  • 感谢您的更正,但我的控制器中的编辑怎么样?我怎么能让它知道我选择了哪个按钮。谢谢。
  • 您只需提交表单并在控制器操作中发布值。
  • 感谢您的解释。我现在能够理解它了。 :) 我能够让它工作。
【解决方案2】:

假设您对 Status 使用 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 oject。

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

如果 Status 是具有两个以上(即 bool)选项的 Enum,它也可能有效,但我之前没有尝试过。

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

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

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

【讨论】:

  • 感谢您的更正,但我的控制器中的编辑怎么样?我怎么能让它知道我选择了哪个按钮。谢谢。
猜你喜欢
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 2017-12-29
  • 1970-01-01
  • 2019-03-31
  • 2021-08-23
相关资源
最近更新 更多