从控制器获取价值以在ASP.NET MVC中进行查看

时间:2019-02-19 19:48:36

标签: c# asp.net asp.net-mvc

我正在尝试从控制器传递数据以进行查看。我相信我真的很近,但是我缺少一些细小的东西。

控制器:

namespace ePolicy.ConsumerPortal.Controllers
{
    [HandleErrors]
    public class TwoFAController : BaseController
    {
        [AcceptVerbs(new string[1] { "GET" })]
        public ActionResult SMS(string supplierId)
        {
            var model = new _2FASMSModel();
            return View("TwoFA_sms", model);
        }

        [AcceptVerbs(new string[1] { "POST" }), ValidateInput(false)]
        public ActionResult Initiate(FormCollection formValues, string email, string phone, string method)
        {
            return RedirectToAction("SMS", "TwoFA", new { phone = "1234567890"})
        }
    }
}

模型类:

public class _2FASMSModel : BaseModel
{
    public string Phone { get; set; }

    public _2FASMSModel()
    {
    }
}

视图(.aspx文件)

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/ConsumerPortalNew.Master" Inherits="System.Web.Mvc.ViewPage<ePolicy.ConsumerPortal.Models._2FASMSModel>" Debug="true" %>
<%@ Import Namespace="ePolicy.Resources" %>
<%@ Import Namespace="ePolicy.Shared.Enumeration" %>
<%@ Import Namespace="System.Web" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
</asp:Content>

<asp:Content ID="login" ContentPlaceHolderID="MainContent" runat="server">
    <script type="text/javascript" src="<%: Url.StaticFile("/Scripts/TwoFA.js")%>"></script>
    <div>
       <p>@Model.Phone</p>
    </div>
</asp:Content>

我想做的事情:我想在视图文件中显示字符串“ 1234567890”。

我尝试过的操作:我可以将“ 1234567890”作为URL参数的一部分,但是,我无法检索该字符串,因此无法在视图中显示。

@Model.Phone将被解释为原义字符串,而不是我想要的值(“ 1234567890”)。

我还尝试通过添加以下行来使用ViewBag

ViewBag.Phone = supplierID

返回视图之前。并在视图中调用它:

<p>ViewBag.Phone</p>

它也不起作用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我相信您需要更改:

<p>@Model.Phone</p>

收件人:

<p><%: Model.Phone %></p>

别忘了用数据实际填充模型:

[AcceptVerbs(new string[1] { "GET" })]
public ActionResult SMS(string supplierId)
{
    var model = new _2FASMSModel() { Phone = "HTC 10" };
    return View("TwoFA_sms", model);
}

那至少应该在您的视图上显示一些动态数据。最后一步是将数据从一个控制器动作传递给另一个控制器动作。在ASP.NET MVC中,可以使用控制器上的TempData属性。这是一个字典,您可以在其中存储一些数据,这些数据将在下一个请求中提供。似乎正是您想要的。

[AcceptVerbs(new string[1] { "GET" })]
public ActionResult SMS(string supplierId)
{
    var model = new _2FASMSModel() { Phone = TempData["Phone"] as string };
    return View("TwoFA_sms", model);
}

[AcceptVerbs(new string[1] { "POST" }), ValidateInput(false)]
public ActionResult Initiate(FormCollection formValues, string email, string phone, string method)
{
    TempData["Phone"] = "1234567890";
    return RedirectToAction("SMS", "TwoFA");
}

答案 1 :(得分:0)

[AcceptVerbs(new string[1] { "GET" })]

公共ActionResult SMS(字符串SupplierId){ var model = new _2FASMSModel();

model.Phone =“ 1234567890”;

return View(“ TwoFA_sms”,model); }

查看

            @ Html.LabelFor(model => model.Phone,htmlAttributes:new {@class =“ control-label col-md-2”})                              @ Html.EditorFor(model => model.Phone,新的{htmlAttributes =新的{@class =“ form-control”}})                 @ Html.ValidationMessageFor(model => model.Phone,“”,新的{@class =“ text-danger”})