我有一些不需要的文本框.如果用户输入任何内容,则在MVC 2中将其作为"null"传递.它在MVC 1中作为"""传递.我可以进行哪些更改以适应此目的?
public string Name { get; set; }
public string Offer{ get; set; }
public string AutoID { get; set; }
using (SqlConnection connect = new SqlConnection(connections))
{
SqlCommand command = new SqlCommand("Info_Add", connect);
command.Parameters.Add("autoID", SqlDbType.BigInt).Direction = ParameterDirection.Output;
command.Parameters.Add(new SqlParameter("name", Name));
//Offer now returns a null value, which cannot be passed
command.Parameters.Add(new SqlParameter("offer", Offer));
command.CommandType = CommandType.StoredProcedure;
connect.Open();
command.ExecuteNonQuery();
AutoID = command.Parameters["autoID"].Value.ToString();
}
Run Code Online (Sandbox Code Playgroud) 我一直在使用ASP.NET MVC 1,并且我很想利用MVC 2中的改进.像验证这样的东西似乎大大改进了,强类型的HTML帮助方法看起来很棒.
那么,对于那些拥有使用ASP.NET MVC 1并且现在使用MVC 2的实际经验的人来说,使用MVC 2的五大理由是什么?
我正在尝试创建一个会话,该会话存储成员信息,应用程序可以使用该会话信息来显示某些导航并允许访问某些页面和成员角色特定功能.
我已经能够以MemberLoggedIn这种方式将我的对象分配给会话:
//code excerpt start...
MemberLoggedIn loggedIn = new MemberLoggedIn();
if (computedHash == member.Hash)
{
loggedIn.ID = member.ID;
loggedIn.Username = member.Username;
loggedIn.Email = member.Email;
loggedIn.Superuser = member.Superuser;
loggedIn.Active = member.Active;
Session["loggedIn"] = loggedIn;
}
else if (ModelState.IsValid) {
ModelState.AddModelError("Password", "Incorrect Username or Password.");
}
return View();
Run Code Online (Sandbox Code Playgroud)
这很好用.然后我可以Session["loggedIn"]用这种方式将属性发送到View:
[ChildActionOnly]
public ActionResult Login()
{
if (Session["loggedIn"] != null)
ViewData.Model = Session["loggedIn"];
else
ViewData.Model = null;
return PartialView();
}
Run Code Online (Sandbox Code Playgroud)
在部分视图中,我可以使用Model.Username或引用会话数据Model.Superuser.
但是,它似乎在控制器或自定义动作过滤器中不起作用.有没有办法获得相同的Session["loggedIn"].Username?
在我的母版页中使用ASP.NET MVC 2和Html.RenderAction实现如下所示抛出错误"找不到路径'/'的控制器":
我是一个新手,我必须在RegisterRoutes做一些事情来使这项工作?
<% Html.RenderAction("TeaserList", "SportEventController"); %>
public class SportEventController : Controller
{
public string TeaserList()
{
return "hi from teaserlist";
}
}
Run Code Online (Sandbox Code Playgroud) 这是我正在使用的代码,但是编译器说:匿名类型不能具有相同名称的多个属性
context.MapRoute("RouteName", "statics/category/{fileName}",
new
{
controller = "myController",
action = "Index"
},
new
{
fileName = new fnRouteConstraint(),
fileName = new AnotherRouteConstraint()
});
Run Code Online (Sandbox Code Playgroud) 我正在为我的项目中的某些控制器方法编写一些单元测试,并且想知道是否要对控制器类本身或该控制器的接口进行测试.
我应该为每个控制器创建一个接口并对其进行单元测试吗?
我正在四处学习如何对ASP.NET MVC控制器操作进行单元测试.具体来说,我正在尝试模拟ControllerContext,以便我可以测试访问HttpContext.Current.User.Identity.Name的操作.
我正在使用Moq.
在我打开MockBehavior.Strict之前,事情进展顺利.我知道如果代码无法调用我标记为Verifiable的东西,这会抛出异常.显然,如果我没有提供设置(如IsChildAction)的"额外"方法不被调用,它也会抛出异常.
[TestMethod]
public void Index_Get_AccessesUserIdentityName()
{
// Arrange
var mock = new Mock<ControllerContext>(MockBehavior.Strict);
mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns("treycarroll").Verifiable();
HomeController controller = new HomeController();
controller.ControllerContext = mock.Object;
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
mock.Verify();
...
}
Run Code Online (Sandbox Code Playgroud)
这是我正在测试的Controller操作:
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!"+User.Identity.Name;
return View();
}
Run Code Online (Sandbox Code Playgroud)
返回View()时触发异常; 声明被执行.错误消息告诉我,我需要一个调用IsChildAction的设置方法,所以我将我的测试类更新为:
[TestMethod]
public void Index_Get_AccessesUserIdentityName()
{
// Arrange
var mock = new Mock<ControllerContext>(MockBehavior.Strict);
string expectedUserName = "treycarroll";
mock.SetupGet(p => p.HttpContext.User.Identity.Name).Returns(expectedUserName).Verifiable();
mock.SetupGet(m => m.IsChildAction).Returns(true).Verifiable();
HomeController controller …Run Code Online (Sandbox Code Playgroud) 我有2个网址/数据和/数据/ {月}/{日}/{年}.
我创造了两条路线
routes.MapRoute(
"Data_Name",
"Data",
new { controller = "Data", action = "DataForAnyDate" }
);
routes.MapRoute(
"DataFullDate",
"Data/{month}/{day}/{year}",
new { controller = "Data", action = "DataForSpecificDate"}
);
Run Code Online (Sandbox Code Playgroud)
当我去/ Data时,一切正常,我看到的是Views/Data/DataForAnyDate,控制器是Data.DataForAnyDate.当我去/ Data/12/29/2009时,我想要相同的asp页面(相同的视图),但是填充了特定日期的数据,因此我使用Data.DataForSpecificDate控制器.但问题是mvc一直在Views/Data/DataForSpecificDate中查找我的视图,我希望它在Views/Data/DataForAnyDate中查看.
有没有办法告诉Data.DataForSpecificDate进入Views/Data/DataForAnyDateview,还是有其他方法来解决这个问题?
谢谢
--MB
我试图测试我的扩展方法,该方法转换字符串逗号分隔的字符串列表:
public static class Extensions
{
public static string ToCommaString<T>(this IList<T> input)
{
StringBuilder sb = new StringBuilder();
foreach (T value in input)
{
sb.Append(value);
sb.Append(",");
}
return sb.ToString();
}
public void TestExtension()
{
IList test=new List<string>();
//test.ToCommaString doesnt appear
}
}
Run Code Online (Sandbox Code Playgroud)
问题是在TestExtension方法中我不能使用ToCommaString方法.
你知道发生了什么吗?
我可以为我的所有Web应用程序提供此扩展方法在web.config中注册或类似的东西吗?
提前致谢.
最好的祝福.
何塞
我要开始我的硕士论文项目,我要选择一种技术来合作.我在两个项目中使用过Rails和ASP MVC,但从未使用过Django,只有一些玩过它.但我有一些python的经验,非常喜欢管理界面.
我的硕士论文的目标是创建一个公立医院的门户网站.
我有几年的.NET和C#经验,但其他选择也很吸引人.
在哲学方面,三者都是开源的,ASP MVC在Mono中工作.
你有什么看法?
更新1:根据您的意见,我的意思是与这个框架分享您的经验(好的和坏的),优点和缺点.
更新2: Btw门户网站将由患者或潜在患者使用......
谢谢
asp.net-mvc-2 ×10
asp.net-mvc ×5
c# ×3
.net ×1
asp.net ×1
constraints ×1
django ×1
mocking ×1
moq ×1
nunit ×1
oop ×1
routes ×1
unit-testing ×1