初学MVC3,有些疑惑,请前辈解惑一下:)

落阳 2012-05-18 12:12:23
1:MVC项目中既有视图,又有控制器,那么,应该按几层来搭建整个项目呢?分别对应什么?

2:存储库,接口的实现,作用体现在哪里?

3:能够通过EF去查询数据库中的View吗?难道复杂的关联查询每次都要在后写用linq或者lamda写吗?
原先在数据库中执行的函数,或者存储过程,现在放到项目中实现,不是会增加服务器的压力吗?

4:控制器,统一放在MVC下的Controllers文件夹中;视图,统一放在Views文件夹中。那么,整个系统的功能模块的层次性,或者叫级别性,无法做到一目了然吗?比如 组织机构/{用户管理,部门管理,职位管理}

希望能有人帮我

另外,顺便带个问题求解决~~

function ChangePwd() {
window.showModalDialog('../Account/ChangePassWord', '', 'dialogWidth:650px;dialogHeight:340px;dialogTop:' + new String((screen.height - 420) / 2) + 'px;dialogLeft:' + new String((screen.width - 650) / 2) + 'px;resizable:no;status:no;scroll:no;help:no;unadorned:yes;');
}

用JS弹出一个窗口进行密码的修改

@Html.BeginForm("ChangePassWord","Account", FormMethod.Post)
<table width="100%" border="0px" cellspacing="0px" cellpadding="0px">
<tr>
<td width="20%" height="30px" align="right" bgcolor="#f2f2f2" class="left_txt2">
用户名:
</td>
<td width="3%" bgcolor="#f2f2f2">
 
</td>
<td width="32%" height="30px" bgcolor="#f2f2f2">
@Html.TextBoxFor(m => m.UserName, new { name = "txt_username", size = "20",@readonly="readonly" })
</td>
<td width="45%" height="30px" bgcolor="#f2f2f2" class="left_txt">
准备修改密码的所属帐号
</td>
</tr>
<tr>
<td height="30px" align="right" class="left_txt2">
当前密码:
</td>
<td>
 
</td>
<td height="30px">
@Html.TextBoxFor(m => m.OldPassword, new { name = "txt_oldpassword", size="20" })
</td>
<td height="30px" class="left_txt">
当前密码  <span style=" font-size:12px; color:Red;">@Html.ValidationMessageFor(m => m.OldPassword)</span>
</td>
</tr>
<tr>
<td height="30px" align="right" bgcolor="#f2f2f2" class="left_txt2">
新密码:
</td>
<td bgcolor="#f2f2f2">
 
</td>
<td height="30px" bgcolor="#f2f2f2">
@Html.TextBoxFor(m => m.NewPassword, new { name = "txt_password",size="20" })
</td>
<td height="30px" bgcolor="#f2f2f2" class="left_txt">
需要设置的新密码  <span style=" font-size:12px; color:Red;">@Html.ValidationMessageFor(m => m.NewPassword)</span>
</td>
</tr>
<tr>
<td height="30px" align="right" bgcolor="#f2f2f2" class="left_txt2">
重新输入新密码:
</td>
<td bgcolor="#f2f2f2">
 
</td>
<td height="30px" bgcolor="#f2f2f2">
@Html.TextBoxFor(m => m.ConfirmPassword, new { name = "txt_password2",size="20" })
</td>
<td height="30px" bgcolor="#f2f2f2" class="left_txt">
重新输入新密码  <span style=" font-size:12px; color:Red;">@Html.ValidationMessageFor(m => m.ConfirmPassword)</span>
</td>
</tr>
<tr>
<td height="17px" colspan="4" align="right">
 
</td>
</tr>
<tr>
<td height="30px" colspan="4" class="left_txt2">
<table width="100%" style="height: 40px;" border="0px" cellpadding="0px" cellspacing="0px">
<tr>
<td colspan="4" align="center">
<input id="btn_save" type="submit" value="" style="width: 85px; height: 28px;
background-image: url(../../images/save.gif); cursor: :pointer; border-width: 0px;" />
<input id="btn_close" type="button" value="" style="width: 85px; height: 28px; background-image: url(../../images/close.gif);
cursor: :pointer; border-width: 0px;" onclick="window.close();" />
</td>
</tr>
</table>
</td>
</tr>
</table>

修改密码视图的代码,表单提交后,执行Account控制器中的方法,如下:

[HttpPost]
public ActionResult ChangePassWord(ChangePasswordModel model)
{
if (ModelState.IsValid)
{
EFDbContext db = new EFDbContext();
var u = db.User.Where(s => s.UserID == CurrentUserInfo.UserID);
u.FirstOrDefault().Password = model.NewPassword;
db.SaveChanges();
return View(model);//请问这里该怎么写?
}
else
{
return View(model);
}
}

密码修改完成后,应关闭子窗口,但是不知道该怎么写。

分较少,就这么点了。。辛苦各位了
...全文
170 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
子在川上笑 2012-07-31
  • 打赏
  • 举报
回复
..!哥也遇到这个问题了,多谢大侠们啊,百度一下就给看到了这个贴子,不然的话,我估计还要想个半天了。。。。。。。
我就是大神 2012-05-18
  • 打赏
  • 举报
回复
我也是工作了刚学。还不懂呢
落阳 2012-05-18
  • 打赏
  • 举报
回复
泪奔,自己2,没有用using。结贴,谢谢大家。
落阳 2012-05-18
  • 打赏
  • 举报
回复


如图
落阳 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

response.write("<script>window.close()</script>");
response.end();
return null
控制器里面

或者html.raw(TempData["CPW"] )
[/Quote]
谢谢你的帮助 :) 控制器里用response,就实现了。

但是似乎除了个小问题,修改密码视图中的@Html.BeginForm("ChangePassWord", "Account", FormMethod.Post, new { name="form1" }),编译之后成了:
<form action="/Account/ChangePassWord" method="post" name="form1">System.Web.Mvc.Html.MvcForm

凭空多出“System.Web.Mvc.Html.MvcForm”,以文本形式出现在页面上了,这是为什么?
tptptp00 2012-05-18
  • 打赏
  • 举报
回复
response.write("<script>window.close()</script>");
response.end();
return null
控制器里面

或者html.raw(TempData["CPW"] )
落阳 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

关闭子窗体,那就是执行关闭窗体的js代码

window.close()

如何执行?
用TempData传到页面上去
里面的内容就是<script>js代码</script>
[/Quote]

我试了一下,代码如下,请指正~
[HttpPost]
public ActionResult ChangePassWord(ChangePasswordModel model)
{
if (ModelState.IsValid)
{
EFDbContext db = new EFDbContext();
var u = db.User.Where(s => s.UserID == CurrentUserInfo.UserID);
u.FirstOrDefault().Password = model.NewPassword;
db.SaveChanges();
TempData["CPW"] = "<script>window.close();</script>";
return View(model);
}
else
{
return View(model);
}
}


前台在body里找个地方放:
@if (TempData["CPW"] != null) {
@TempData["CPW"]
}


但是没执行js哇,只是在页面上show出来了而已。
我有点笨。。希望能给出详细代码,万分感谢
zh6335901 2012-05-18
  • 打赏
  • 举报
回复
1.没有固定的答案,依情况而定,如果你认为有必要,可以把控制器分离出来作为单独的组件。
2.依赖倒置,高层并不依赖于低层,而是依赖于抽象(接口)
3.EF也可以执行存储过程,MVC也不一定要使用ef或者其他orm,你用ado.net也是可以的
4.这是asp.net mvc框架的约定,有句话叫做约定胜于配置,当然你可以不遵循这些约定
叫我 Teacher 周 2012-05-18
  • 打赏
  • 举报
回复
关闭子窗体,那就是执行关闭窗体的js代码

window.close()

如何执行?
用TempData传到页面上去
里面的内容就是<script>js代码</script>
落阳 2012-05-18
  • 打赏
  • 举报
回复
。。伤心啊 ,没人知道吗?
落阳 2012-05-18
  • 打赏
  • 举报
回复
自己顶一下。。别这么快就沉了

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧