MVC常见问题小总结


最近刚开始在项目中使用MVC,(ps:不要笑我老土啊)。使用的过程中遇到了一些小问题,记录下来以便日后翻阅。


  1. 在MVC中项目中使用JQuery,$.Post方法提交数据时产生中文乱码现象?
      解决方法:
  • 在$.post时进行数据编码,使用escape方法

$.post("@Url.Action("AddFriendLink" , "Setup")" ,{"Name" :escape(name)},function(data){

if(data>0){

                    alert( '添加成功!' );

                    window.location.reload();

                }

else{

                    alert( '添加失败!' );

                }

            });

  • 在后台进行解码,使用Server.UrlDecode方法。

public JsonResult Add(string Name)

{

     DemoClass demoClass= newDemoClass 

            {

                Name = Server.UrlDecode(Name)

            };

     int result = demoService.Add(demoClass);

     return Json(result);

}


2. MVC中如何设置文本框的宽度?

    其实这个本不算是问题,不过刚开始还是写错了。

  • 刚开始写的是:

@Html.TextBoxFor(model => model.Name, new { width="300px" })             (×)

发现没有效果。

  • 实施了第二方案,搞定了。

@Html.TextBoxFor(model => model.Name, new { @style = "width:300px" })  (√)


3.Html.RadioButtonFor怎么使用呢?

   像下面这样就可以了。当Model.IsStudent=true时会自动选中第一项,以此类推。

@Html.RadioButtonFor(model=>model.IsStudent,true)是
@Html.RadioButtonFor(model => model.IsStudent, false)否


4. @helper自定义方法

@helper GetStatusName(int status)

    {

       //code block

    }

调用时直接使用@GetStatusName(2)即可。


5.model多级引用时,对应的html?

@ Html.TextBoxFor(model => model.Topic.Title)

对应生成的HMTL代码为:

<input name="Topic.Title" class="ConInpon" id="Topic_Title" Onkeyup="getLen(this)" type="text"/>

在写脚本的时候要注意了啊。


6.DropDowlList控件数据绑定的几种常用方式?

①下拉框中的选项为几个简单的固定值。

@Html.DropDownList("ProvinceId", new SelectListItem[]{
                      new SelectListItem{ Text="选择类别",Value="0", Selected=true},
                      new SelectListItem{Text="类别A",Value="1"},
                      new SelectListItem{Text="类别B",Value="2"}
                      })

②将数据封装为SelectList类型,并且放在ViewBag中进行传递。

  • controller层:

IList< Person> personList =personService.GetList();

ViewBag.personId= new SelectList(personList , "Id", "Name", queryParam.EditorId);

  • View层:直接根据ID进行绑定就可以了。

@Html.DropDownList( "personId")

③如果页面中的数据比较多,直接都放在viewbag中传递会比较乱,我们可以将页面中需要的数据封装成一个类,其中Select类型被封装为一个属性。

  • 封装类

public class IndexView

{

   public SelectList PersonList{get;set;}

   …

}

  • controller: 对IndexView中的属性赋初始值。

IList< Person> personList =personService.GetList();

IndexView indexView = new IndexView ()

            {

                     PersonList= new SelectList(personList , "Id", "Name", personList )

            };

            ViewBag.indexView = indexView;

  • View:

@ Html.DropDownListFor(x=>queryParam.PersonId,indexView.PersonList)


7. 异步提交表单时,要记得Ajax.BeginForm哟!

   做表单提交时,绕的小弯子:

@ using (Ajax.BeginForm( "Index", "Manage" , new AjaxOptions

{

    HttpMethod = "Post",

    OnSuccess = "Success",

    OnFailure = "Failure"

}))

    {

     @Html.ValidationSummary(true)

     @ Html.TextBoxFor(model => model.Name, new { @style = "width:300px" })

     @Html.ValidationMessageFor(model => model.Name)

    }

脚本提示执行结果

<script language="javascript" type ="text/javascript">

function Success() {

        alert( "修改成功" );

    }

function Failure() {

        alert( "修改失败!" );

    }

</script>

其中还可以设置  UpdateTargetId属性,执行结果后用来显示执行结果。

重要的一点是要添加

<script src=" @Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js" )" type="text/javascript"></script >

现在基本成功了。

 

疑问:

  • 还有最后一个问题是产生了中文乱码现象?用Html.BeginForm没问题,用Ajax.BeginForm就会出现乱码。(博问地址
最后终于找到原因了:

view里面和web.config里的编码有冲突了:

view:

      <script src=" @Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js" )" type="text/javascript"></script >

web.config:

    <globalization fileEncoding=" gb2312" requestEncoding =" gb2312" responseEncoding=" gb2312" culture =" zh-CN" />

还希望各位大牛能够慷慨的提供一种比较好的解决方案,这里是测试项目。

【附件:中文乱码demo

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MVCModel-View-Controller)、MVP(Model-View-Presenter)和MVVM(Model-View-ViewModel)是常见的软件架构模式,用于组织和管理应用程序的代码。 1. MVCModel-View-Controller): - Model(模型):负责存储和管理应用程序的数据和业务逻辑。 - View(视图):负责显示数据并与用户进行交互。 - Controller(控制器):处理用户输入,并根据输入更新模型和视图。 在MVC中,模型和视图是相互独立的,通过控制器来协调数据的更新和视图的更新。用户的输入首先由控制器处理,然后控制器更新模型的状态,最后模型的变化会反映在视图上。MVC模式可以有效地分离应用程序的逻辑和界面。 2. MVP(Model-View-Presenter): - Model(模型):负责存储和管理应用程序的数据和业务逻辑。 - View(视图):负责显示数据并与用户进行交互。 - Presenter(展示器):作为View和Model之间的中间人,处理用户输入并更新模型和视图。 在MVP中,Presenter负责处理用户的输入,并根据输入更新模型和视图。View只负责显示数据和将用户输入传递给Presenter,而不直接与模型交互。这种分离使得视图和模型可以独立开发和测试。 3. MVVM(Model-View-ViewModel): - Model(模型):负责存储和管理应用程序的数据和业务逻辑。 - View(视图):负责显示数据并与用户进行交互。 - ViewModel(视图模型):作为View和Model之间的中间人,处理视图的状态和行为,并将数据从模型转换为视图可用的形式。 在MVVM中,视图通过绑定(数据绑定)与视图模型关联,当模型的状态发生变化,视图模型会自动更新视图。这种双向绑定使得视图和模型始终保持同步,减少了手动更新视图的代码量。 总结来说,MVC、MVP和MVVM都是用于组织和管理应用程序的代码,它们都有各自的优势和适用场景。选择哪种架构模式取决于应用程序的需求、团队的技术背景和个人偏好。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值