Asp.net Mvc Framework 九 (View与Controller交互)
这一回为避免写第八节时那种情况再次出现,我改用Wps写了,如果复制过去格式有问题讲大家见谅
--邹健
本节所有示例都是讲解登录提交表单的过程
为了本课能更好讲解我们先建立一个账号的Model
namespace
MvcApplication4.Models
{
public
class
Account
{
string
_username;
public
string
Username {
get
{
return
_username; }
set
{ _username =
value
; }
}
string
_password;
public
string
Password {
get
{
return
_password; }
set
{ _password =
value
; }
}
}
}
一.
使用我们Asp时代的老朋友
我们建立一个HomeController,之后在其中加一个Index的Action
public
void
Index() {
RenderView(
"Index"
);
}
是用于显示Index这个View的(Index.aspx):
这是提交表单的
<
form
method
="post"
action
="
<%
= Url.Action("save")
%>
">
<%
=
Html.TextBox(
"username"
)
%>
<%
=
Html.TextBox(
"password"
)
%>
<%
=
Html.SubmitButton(
"登录"
)
%>
</
form
>
大家可以看到在这个View中form的Action为save
于是我们还需要一个叫save的Action用于接收表单:
public
void
save (){
ViewData[
"username"
] = Request.Form[
"username"
];
ViewData[
"password"
] = Request.Form[
"password"
];
RenderView(
"Result"
);
}
最后我们将结果显示在Result.aspx这个View中:
这是用于接收结果的
<%
=
ViewData
[
"username"
]
%>
<%
=
ViewData
[
"password"
]
%>
大家都看到了,我们在Save中使用了我们的老朋友Request.Form来接收了表单
二.
其实Asp.netMVC为我们提供了更好的方法
是什么方法呢?
那就是我觉得不错的一方法
ReadFromRequest
它可以接收Form和QueryString
看以下save这个Action的代码
public
void
save (){
ViewData[
"username"
] =
this
.ReadFromRequest(
"username"
);
ViewData[
"password"
] =
this
.ReadFromRequest(
"password"
);
RenderView(
"Result"
);
}
可以实现上面一样的功能
三.
我们可以用"参数"
前面我们提到了参数来接收的功能
public
void
save (
string
username,
string
password){
ViewData[
"username"
] = username;
ViewData[
"password"
] = password;
RenderView(
"Result"
);
}
一切OK
四.
到激动人心的地方了我们使用绑定功能
在Monorail中我们有这样的功能
public void save([DataBind("account")] Account account) ;可以实现将一个对象与表单绑定
当然Asp.net MVC中也应该有
我们将View改成:
这是提交表单的
<
form
method
="post"
action
="
<%
= Url.Action("save")
%>
">
<%
=
Html.TextBox(
"
Account
.username"
)
%>
<%
=
Html.TextBox(
"
Account
.password"
)
%>
<%
=
Html.SubmitButton(
"登录"
)
%>
</
form
>
而Save这个Action中写如下代码:
public
void
save() {
Account
user =
new
Account
();
BindingHelperExtensions
.UpdateFrom(user, Request.Form,
"
Account
"
);
ViewData[
"username"
] = user.Username;
ViewData[
"password"
] = user.Password;
RenderView(
"Result"
);
}
呵呵,仍然可以输
BindingHelperExtensions
.UpdateFrom
让我们将从表单中以对象方式传递着数据
当然这个对象如果绑定的为Dlinq的对象就更加方便应用了
也可以通过这种方式绑定
View:
这是提交表单的
<
form
method
="post"
action
="
<%
= Url.Action("save")
%>
">
<%
=
Html.TextBox(
"username"
)
%>
<%
=
Html.TextBox(
"password"
)
%>
<%
=
Html.SubmitButton(
"登录"
)
%>
</
form
>
Action:
public
void
save() {
Account
user =
new
Account
();
BindingHelperExtensions
.UpdateFrom(user, Request.Form);
ViewData[
"username"
] = user.Username;
ViewData[
"password"
] = user.Password;
RenderView(
"Result"
);
}
也可以实现
这里用了
BindingHelperExtensions
.UpdateFrom(user, Request.Form);
来实现绑定
这个用于表单中只有一个对象的情况,前一个则可适用于多个对象在同一表彰中的情况
本节示例MVC9.rar
Asp.net Mvc Framework 系列