如何在 ASP.NET MVC 中将数据从 Controller 传递到 WebForm?

How to pass data from Controller to WebForm in ASP.NET MVC?

我正在尝试学习 ASP.NET MVC 和 ADO.NET。我正在制作一个演示网站,其中会有一个管理面板。管理员将更新每日消息,这将反映在主页中。我正在使用 ASP.NET MVC。我在数据库中创建了 table 作为

create table DailyMsg
(
    Sno int primary key, 
    msg varchar(max)
);

这是我的日常访问层

public class DailyMsgs
{
    static string connectionString = @"data source = DELL\SQLEXPRESS01;initial catalog = amen; persist security info=True;Integrated Security = SSPI;";
    SqlConnection con = new SqlConnection(connectionString);

    DailyMsg dm = new DailyMsg();

    public string ViewDailyMessage()
    {
        SqlCommand com = new SqlCommand("sp_viewDsilyMSg", con);
        com.CommandType = CommandType.StoredProcedure;
        con.Open();
        string simpleValue = com.ExecuteScalar().ToString();
       
        con.Close();
        return simpleValue;
    }
}

我的模型class:

public partial class DailyMsg
{
    public int Sno { get; set; }
    public string msg { get; set; }
}

现在卡在这一步了。我不知道如何将这个返回值 simpleValue 放到我视图的 <h2> 标签中。

我的控制器

DailyMsgs dailyMsgs = new DailyMsgs();

private amenEntities db = new amenEntities();

// GET: DailyMsgs
public ActionResult Index()
{
    return View();
}

我的主页:

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

不要将 Web 表单与 MVC 一起使用,而是使用视图。

  1. Views/Home 目录中创建名为 Index.cshtml 的视图。或者使用简单的方法 - 只需右键单击控制器中的 Index() 操作和 select Add View...

  2. 在索引视图的顶部添加

    @model @<YourProjectName>.<Models>.DailyMsg
    

    并将<YourProjectName>.<Models>替换为DailyMsgclass所在的实际命名空间

  3. 目前,dailyMsgs.ViewDailyMessage() return是一个字符串。您需要将其转换为您的模型:

    // GET: DailyMsgs
    public ActionResult Index()
    {
        DailyMsg dailyMsg = new DailyMsg();
        // here I'm assuming your stored proc returns the daily message without the id
        // you should update ViewDailyMessage() to return a DailyMsg
        dailyMsg.msg = dailyMsgs.ViewDailyMessage();
        return View(dailyMsg);
    }
    
  4. 添加html:

    <div>
        @Model.msg
    </div>
    

文本应显示在 div 内。

理想情况下,您应该将数据层中的 ViewDailyMessage() 更新为 return 您的 DailyMsg 模型而不是字符串。


此外,请考虑重命名您的 classes 和方法,因为它们目前命名不当且令人困惑。您的数据层 DailyMsgs 和模型 DailyMsg 具有非常相似的名称并且执行完全不同的功能。

给他们起个合适的名字。我建议重命名如下:

// data layer
// DailyMsgs (rename) -> MessageDataProvider
public class MessageDataProvider
{
    // rename ViewDailyMessage -> GetDailyMessage
    public DailyMessageModel GetDailyMessage()
    {
    }
}

// model
// DailyMsg (rename) -> DailyMessageModel
public partial class DailyMessageModel
{
}

这样从名字就可以看出每个class的职责(一个是数据层,一个是模型)