1

我目前有一个带有提交和取消按钮的表单。根据某些逻辑,每次页面加载时,我都希望相同的取消按钮重定向到应用程序中的不同其他页面。这是我目前在我的 aspx 视图中的代码,它根据我的属性更改 location.href

   <% if (Model.MyProperty.Equals("something"))
      { %>
       <input class="btnCancel" type="button" value="" onclick="location.href='<%: Url.Action("MyAction","MyController", new {Area="MyArea"},null)%>'" />
   <% } %>
   <% else if (Model.MyProperty.Equals("somethingelse"))
      { %>
       <input class="btnCancel" type="button" value="" onclick="location.href='<%: Url.Action("MyOtherAction","MyOtherController", new {Area="SomeOtherArea"},null)%>'" />
   <% } %>

这是正确而优雅的方法吗?如果有办法,我宁愿减少多个 IF-ELSE 条件。

谢谢你的时间。

4

3 回答 3

5

我一直处理多个重定向选项的方式是在控制器操作中设置 href 值。

View 是通用的,但控制器操作特定于您呈现的页面的上下文。因此,在您的模型中,创建一个名为 CancelUrl 的属性。现在,在控制器操作中,将其设置为您希望它转到的链接。

model.CancelUrl = Url.Action("action", "controller");

这样,您在视图中所要做的就是说

<a href="@Model.CancelUrl">Text</a>
于 2012-05-02T15:40:17.863 回答
1

您可以创建一个取消方法,将您的属性作为参数并在控制器中适当地重定向。无论如何,此逻辑可能不应该出现在您的视图中,因为视图应该具有几乎为 0 的逻辑

于 2012-05-02T15:40:15.120 回答
0

我会将用于决定取消操作的属性放在视图模型中(正如您已经拥有的那样),以及任何其他必需的属性。

例如:

public class IndexModel
{
    //any other properties you need to define here
    public string MyProperty { get; set; }
}

那么您的视图将类似于:

@model IndexModel

@using (Html.BeginForm())
{
    //other information you may want to submit would go here and in the model.

    @Html.HiddenFor(m => m.MyProperty)
    <button type="submit" name="submit" value="submit">submit</button>
    <button type="submit" name="cancel" value="cancel">cancel</button>
}

最后,您的 post 操作应该决定应该返回的下一个操作:

[HttpPost]
public ActionResult Index(IndexModel model)
{
    if (!string.IsNullOrEmpty(Request["submit"]))
    {
        if (ModelState.IsValid)
        {
            //any processing of the model here
            return RedirectToAction("TheNextAction");
        }
        return View();
    }

    if (model.MyProperty.Equals("something"))
    {
        return RedirectToAction("MyAction", "MyController", new { area = "MyArea" });
    }
    else //assumes the only other option is "somethingelse"
    {
        return RedirectToAction("MyOtherAction", "MyOtherController", new { area = "SomeOtherArea" });
    }
}
于 2012-05-02T18:43:37.677 回答