如何将字段的静态值(View1)传递给ASP.Net中的(View2)中的另一个字段

时间:2017-03-14 17:25:42

标签: c# asp.net-mvc

您可以帮助在另一个视图字段中发送字段的静态值。

所以当用户点击按钮时,它将直接转到页面

我的静态值视图页

@using (Html.BeginForm())
    {

<div class="form-horizontal">
    <h4>Customer</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    <div class="form-group">
        @Html.LabelFor(model => model.Price, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Price, new { htmlAttributes = new { @Value = "5", @readonly = "readonly", @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" })
        </div>
    </div>


    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Pay" class="btn btn-default" />
        </div>
    </div>
</div>
 }

到这个视图

<div class="form-horizontal">
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">

            <div class="form-group">
                @Html.LabelFor(model => model.Payment.Amount, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.Payment.Amount, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.Payment.Amount, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
</div>
       }

      <div>
        @Html.ActionLink("Back to List", "Index")

控制器1

        public ActionResult Pay(Payment apsp)
    {

        decimal amount = apsp.Amount;

        Payment pay = new Payment
        {

            Amount = amount

        };


        return RedirectToAction("Create");
    }

模型

public decimal Amount{ get; set; }

2 个答案:

答案 0 :(得分:0)

目前,您的Pay操作方法返回一个RedirectResult,它基本上是一个 302 响应,它告诉浏览器对Create操作方法url进行新的HTTP GET调用。如果要传递一些数据,则应返回视图而不是此重定向结果,并将视图模型传递给View方法调用。

所以替换

 return RedirectToAction("Create");

return View("Create",pay);

如果您只是读取一个属性并将其分配给相同的对象类型,也没有理由创建新对象。

public ActionResult Pay(Payment apsp)
{
   return View("Create",apsp);
}

但是根据您的问题,看起来您的第一个视图和第二个视图是强类型的不同视图模型。要使上述代码起作用,两者都应该强类型化为相同的视图模型(因为您传递的是Payment的相同对象)

请注意。可以通过ReidrectToAction方法调用传递(最小)数据。阅读以下帖子,了解有关实现这一目标的不同方法的更多信息。

How do I include a model with a RedirectToAction?

答案 1 :(得分:0)

我假设你知道HttpPost和HttpGet是如何工作的。

您可以通过TempData传递您的视图模型,如下所示:

[HttpGet]
public ActionResult Pay()
{
    return View(new Payment());
}

[HttpPost]
public ActionResult Pay(Payment payment)
{
    TempData["Payment"] = payment;

    return RedirectToAction("Create");
}

[HttpGet]
public ActionResult Create()
{
    if (TempData["Payment"] == null) throw new Exception("Error");

    var payment = TempData["Payment"] as Payment;

    return View(payment);
}