代码改变世界

MVC3 something about form

2012-12-29 11:04  stoneniqiu  阅读(1001)  评论(2编辑  收藏  举报

Form是个很强大的标签,以前在aspx的时候不怎么注意,现在学MVC发现control和MVC交互数据很方便,action特性用以告知web浏览器信息发往哪里

例子1

<form  action=”/Home/Search“  method="get" >
    <input name="q" type="text"/>
<input type="submit" value="search"/>
</form>
而mothod 特性告诉浏览器是使用Http Post 还是使用Http Get。
 在home控制器中
public ActionResult Search(string q)
{
   return Content("<script >alert("+q+"');window.location.href=('Index')</script >", "text/html");  
}
// 这个函数会自动响应视图中的submit,返回你在name为q的input元素中输入的字符串  这里input的name 属性一定要和Search(string q) 对应
 
 在html 辅助方法中的写法是
@{Html.BeginForm("Search","Home",FormMethod.Get)}
<input type="text" name="q"/>
<input type="submit" value="Search"/>
@{Html.EndForm();}
BeingForm 辅助方法询问路由引擎如何找到HomeController控制方法Search的操作
或者是
@using (Html.BeginForm("Search","Home",FormMethod.Get))
{
<input type="text" name="q"/>
<input type="submit" value="Search"/>
}
 
如果你的form里面不想放submit标签,而是用一张图片,那也可以用脚本指向form.submit();
例子二
控制器: 
public ActionResult Login(string userName, string password)
        {
            return Content("<script >alert("+userName+"');window.location.href=('Index')</script >", "text/html");
        }
视图

<input id="userName" name="userName" type="text" />
 
<input id="password" name="password" type="password" />

 <img id="Loginimg" src="Images/g2b4.jpg" width="85" height="40" alt="" />

脚本:
$("#Loginimg").click(function () {
        Login();
    });
function Login() {
        //获取 Form
        var form = $("form");
        var userName = $("#userName").val();
        var password = $("#password").val();
        if (userName == null || userName == "" || password == null || password == "") {
            alert("用户名或密码不能为空");
        }
        else {
            form.submit();
        }
    }
 
当然MVC3自带的强类型视图生成的Form是最方便的,直接传递一个对象回去了,而且还带验证。当然样式可能不是大家想要的。你可以去掉哪些不想或者不必显示的项目

视图:

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>TodayPlan</legend>

@Html.HiddenFor(model => model.NoteId)

<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>

<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}

再在控制器中自己的添加

 再补充个题外话

要在一个视图中,嵌入另外一个强类型视图的分布视图,需要用

@Html.Partial("viewname",Model) 

M要大写,Model就是那个分布是视图中需要用的Model,不然单纯的@Html.Partial("viewname") 会报错,它只适合返回普通的视图,html.renderPartial 也一样

@Html.Action(“name”)  可以显示,但是执行的时候会有很奇怪的错误,昨天用这个方法,返回的create的视图新增时,一直自动的往数据里里面写数据,写了两千多行,吓到了。 一打开那个页面就开始写,删了表中的数据它还是会写。除非关闭网页。 有人知道的为什么的麻烦指教下。