Asp.net mvc 3 将变量中的值保留到MVC3中的操作后
您好,我正在使用NHIBernate在MVC中开发一个应用程序。 这是一个问答论坛,在第一页上,问题列表显示为链接。现在,当我单击链接时,它将移动到问答页面,其中显示特定问题的答案。 我有两个具有以下字段的表 问题表:Asp.net mvc 3 将变量中的值保留到MVC3中的操作后,asp.net-mvc-3,nhibernate,viewbag,Asp.net Mvc 3,Nhibernate,Viewbag,您好,我正在使用NHIBernate在MVC中开发一个应用程序。 这是一个问答论坛,在第一页上,问题列表显示为链接。现在,当我单击链接时,它将移动到问答页面,其中显示特定问题的答案。 我有两个具有以下字段的表 问题表: QuestionID int Question nvarchar(255) Created_Date datetime Modified_Date datetime Created_By int Modified_By int Deleted nchar(1) 答案表: Ans
QuestionID int
Question nvarchar(255)
Created_Date datetime
Modified_Date datetime
Created_By int
Modified_By int
Deleted nchar(1)
答案表:
AnswerId int
Answer nvarchar(255)
Created_Date datetime
Modified_Date datetime
Created_By int
Modified_By int
QuestionID int (foreign key)
Deleted nchar(1)
这就是我尝试过的:
Inside QuestionPage.cshtml
@using (Html.BeginForm("Question_Page","QuestionAnswer",FormMethod.Post))
{
@Html.ValidationSummary(true)
<ul>
@foreach (var item in Model)
{
<li>@Html.ActionLink(item.Question, "Answer_Page", new { Id = item.QuestionID, Question = item.Question })</li>
}
</ul>
<br />
<h2><label for="PostyourQuestion:">Post your Question:</label></h2>
@Html.TextArea("PostyourQuestion")
<br /><br />
<input type="submit"/>
但是问题是OnPost,我在Question变量中得到一个空值,因此当用户提交表单时,我无法在post中显示问题。
请帮帮我。我知道我错过了一件愚蠢的事情。试着换成
@Html.ActionLink(item.Question, "Answer_Page","QuestionAnswer", new { @Id = item.QuestionID, @Question = item.Question },null)
现在,您应该能够在问题变量中获得它
就我个人而言,我认为传递查询字符串中的问题不是一个好主意。我相信查询字符串的字符数是有限的。理想情况下,您应该只传递问题id,并通过查询持久数据源在操作方法中再次构建问题对象
有几种方法可以解决这个问题。IMO,最好的方法是将问题id编码到url中,然后再次从存储库中获取问题。如果需要更高的性能,可以在存储库中实现缓存,或者将其作为封装存储库的层。另一种方法是使用TempData(本质上是会话)在一个请求周期内保存数据。这种方法有一些失败模式——例如,他们单击页面上的另一个操作,然后使用后退按钮——但也相对简单。您不想使用ViewBag。ViewBag旨在将辅助数据作为单向传输传递到视图。正如您所发现的,它不会在一个请求周期内保持其值
FWIW,我认为您应该在两种方法中都使用问题id,而不是将问题本身作为查询字符串的一部分传递。Hi,thanx 4 d回答..但是我对mvc是新手,你能告诉我如何在控制器中启动一个查询,以便只获取等于Id值的值吗?嘿,伙计thanx 4想法..我明白了..我在控制器中启动了一个查询,并且我能够获取值。@user1274646我对你的表一无所知。尝试复制主页中提供所有问题的查询,并为问题id添加where条件(where QUISTIONID=id)
@Html.ActionLink(item.Question, "Answer_Page","QuestionAnswer", new { @Id = item.QuestionID, @Question = item.Question },null)