Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 将变量中的值保留到MVC3中的操作后_Asp.net Mvc 3_Nhibernate_Viewbag - Fatal编程技术网

Asp.net mvc 3 将变量中的值保留到MVC3中的操作后

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

您好,我正在使用NHIBernate在MVC中开发一个应用程序。 这是一个问答论坛,在第一页上,问题列表显示为链接。现在,当我单击链接时,它将移动到问答页面,其中显示特定问题的答案。 我有两个具有以下字段的表

问题表:

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)