标签: asp.net-mvc-viewmodel

MVC ASP.NET中的ViewData和ViewModel

我是.Net开发的新手,现在正在关注NerdDinner教程.只是想知道你们中是否有人能告诉我

ViewData和ViewModel之间有什么区别

(我所知道的是他们习惯于将某些形式的数据从控制器传递到视图)并且可能告诉我应该在什么情况下使用ViewData而不是ViewModel,反之亦然

提前致谢!

出击

c# asp.net controller view asp.net-mvc-viewmodel

10
推荐指数
2
解决办法
4303
查看次数

将两个列表返回到视图c#mvc

我有两个列表,我想返回视图,'添加'和'删除'.但是目前我只能返回'已添加'或'已删除'.我怎样才能在一个对象中返回?我对MVC很新,所以如果这段代码很乱,请道歉!

public ActionResult Index()
    {
        // Excel upload history

        var fptexcel = db.FPTStaticDataRatedFinancialAssetBase
                       .OrderBy(e => e.FORATExcelId)
                       .Select(e => e.FORATExcelId).Max();

        var fptexcelprevious = fptexcel - 1;

        var newassets = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
                        .Where(c => c.FORATExcelId == fptexcel || c.FORATExcelId == fptexcelprevious)
                        .GroupBy(x => x.Name)
                        .Where(c => c.Count() == 1)
                        .Select(y => y.FirstOrDefault()).ToList();

        var added = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
                         .Where(x => x.FORATExcelId == fptexcelprevious)
                         .Select(x => x).ToList();

        var removed = db.FPTStaticDataRatedFinancialAssetBase.OfType<FPTStaticDataRatedFinancialAssetBase>()
                         .Where(x => x.FORATExcelId == fptexcel)
                         .Select(x => x).ToList();

        return View(newassets.Except(added).ToList());

    }
Run Code Online (Sandbox Code Playgroud)

c# linq asp.net-mvc asp.net-mvc-viewmodel

10
推荐指数
2
解决办法
1万
查看次数

客户端表单验证不适用于MVC中的模态对话框

我正在更改创建表单以成为模式对话框和jquery Unobtrusive验证停止工作,不知道如何解决它.

Index.cshtml有一个触发模式对话框的链接.

<a href="#" id="createCustomer">Create</a>
@section scripts{
<script type="text/javascript">
$('#createCustomer').on('click', function () {
        $.get('/Customer/Create', function (data) {
            $('#modalContainer').html(data);
            $('#myModal').modal({});
        });
    });
Run Code Online (Sandbox Code Playgroud)

Create.cshtml是局部视图.

@model Demo.Web.Models.CustomerVm
@using (Html.BeginForm("Create", "Customer", FormMethod.Post, new { @id="createForm" }))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Customer</h4>
        <hr />
        @Html.ValidationSummary(true)

        <div class="form-group">
            @Html.LabelFor(model => model.Name, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Name)
                @Html.ValidationMessageFor(model => model.Name)
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

@section Scripts …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc data-annotations unobtrusive-validation asp.net-mvc-viewmodel

10
推荐指数
2
解决办法
2万
查看次数

如何使自定义DropDownList编辑器模板的Required属性在客户端运行?

我有一个DropDownLists的编辑器模板,标有这样的属性:

[AttributeUsage(AttributeTargets.Property)]
public class DropDownListAttribute : UIHintAttribute
{
    public string SelectListName { get; set; }
    public DropDownListAttribute(string selectListName)
        : base("DropDownList", "MVC", selectListName)
    {
        SelectListName = selectListName;
    }
}
Run Code Online (Sandbox Code Playgroud)

它本身看起来像这样:

@using Comair.RI.UI.Core
@{
    var list = this.GetModelSelectList();
    var listWithSelected = new SelectList(list.Items, list.DataValueField, list.DataTextField, Model);
}
@Html.DropDownListFor(m => Model, listWithSelected, " - select - ")
Run Code Online (Sandbox Code Playgroud)

我的问题是它只验证服务器端,这对于用户解决所有客户端验证非常烦人,只是提交并获得新的,意外的服务器端验证.

asp.net-mvc data-annotations asp.net-mvc-4 asp.net-mvc-viewmodel

9
推荐指数
1
解决办法
1027
查看次数

如何在ASP.NET MVC中使用ViewModels?

我刚开始学习ASP.NET MVC中的ViewModel.所以,我想实现一个示例如下:

商业实体

public class AddModel
{
    public int a { get; set; }
    public int b { get; set; }

    public int Add()
    {
        return (this.a + this.b);
    }
}
Run Code Online (Sandbox Code Playgroud)

添加ViewModel

public class AddViewModel
{
    public AddModel addModel;
    public int Total { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

调节器

public class AddController : Controller
{
    [HttpPost]
    public JsonResult Add(AddViewModel model)
    {

        int iSum = model.addModel.a + model.addModel.b;
        model.Total = iSum;
        return Json(model);

    }

    public ActionResult Index()
    {
        return View();
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc viewmodel asp.net-mvc-viewmodel

8
推荐指数
2
解决办法
2万
查看次数

在DisplayName属性中插入换行符

在我的ViewModel中有一个需要2行标签的属性,但是当我<br />DisplayName属性中放置HTML代码时,会将HTML代码打印到页面而不是被解释为换行符.有没有办法DisplayName让它有一个换行符呢?

视图:

    <tr>
        <td>
            @Html.LabelFor(m => m.GrossGallons)
        </td>
        <td>
        </td>
    </tr>
Run Code Online (Sandbox Code Playgroud)

视图模型:

    [DisplayName("Gross Gallons <br /> (Max: 6,000)")]
    public decimal GrossGallons { get; set; }
Run Code Online (Sandbox Code Playgroud)

输出试图得到:

Gross Gallons
(Max: 6,000)
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-viewmodel

8
推荐指数
1
解决办法
4971
查看次数

MVC - 将多个数据表传递给视图

我目前在我的MVC项目的HomeController中有以下代码:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        MyDataContext dc = new MyDataContext();

        IQueryable<Table1Data> j =
            from n in dc.Table1                     
            select n;

        return View(j);
    }
Run Code Online (Sandbox Code Playgroud)

这样可行,但现在我想将第二个表传递到同一个视图.所以我在想我应该能做这样的事情:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        MyDataContext dc = new MyDataContext();

        IQueryable<Table1Data> j =
            from n in dc.Table1                     
            select n;

        IQueryable<Table2Data> l =
            from k in dc.Table2        
            select k;

        return View(j, l);
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法有观点接受两个模型是这样,或者,一个方法来合并两个结果集(这两个表没有以任何方式联系?

c# linq asp.net-mvc asp.net-mvc-viewmodel

7
推荐指数
1
解决办法
2万
查看次数

带有子接口的ASP.NET MVC 4 ViewModel

有没有办法在没有自定义模型绑定的情况下处理这个问题?

public class MyViewModel {
  public string UserId { get; set; }
  public IJob Job { get; set; }
}

public interface IJob {
  public long Id { get; set; }
  public string CompanyName { get; set; }
}

public class FullTimeJob : IJob {
  // omitted for brevity
}

public class Internship : IJob {
  // omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是我在默认模型绑定器中遇到错误,因为它不了解实例化IJob的实现.当我创建MyViewModel时,我将FullTimeJob的实例设置为其Job属性.我猜ASP.NET不能保留实现类型?

什么是最佳实践解决方案?

c# asp.net asp.net-mvc-4 asp.net-mvc-viewmodel

7
推荐指数
1
解决办法
1337
查看次数

MVC 5 ViewModel不像在MVC 4中那样工作

我会尽力直截了当.我在StackOverflow上有一些构建ViewModel的帮助.它在MVC 4中运行良好但现在我将应用程序转换为MVC 5它无法正常工作.代码方式没有任何改变.我有一个_navigation.cshtml,它是在我的Layout.cshtml中呈现的部分,并且错误在该Partial中的For循环内.这个代码在MVC 4中工作正常.这是代码:

我的错误是在for循环期间的部分页面中,我Ingredient在行中得到错误:

@foreach (Ingredient ingredient in Model.Ingredients)
Run Code Online (Sandbox Code Playgroud)

也可以在同一个地方的任何其他地方循环.错误说:

找不到类型或命名空间名称'Recipe'(您是否缺少using指令或程序集引用?)

这是我的代码:

型号/ Ingredient.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace XXX.Models
    {
        public class Ingredient
        {
            public int IngredientID { get; set; }
            public string IngredientNameEs { get; set; }
        }
    }
Run Code Online (Sandbox Code Playgroud)

型号/ Recipe.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;

    namespace XXX.Models
    {
        public class Recipe
        {
            public int RecipeID { get; set; }
            public string RecipeNameEs { get; set; }
        } …
Run Code Online (Sandbox Code Playgroud)

c# runtime-error asp.net-mvc-4 asp.net-mvc-viewmodel asp.net-mvc-5

7
推荐指数
2
解决办法
4890
查看次数

总是在MVC中使用ViewModel模式?

在控制器的MVC中,您应该从DB获取Model并将其转换为ViewModel,然后再将其发送到View.通常使用像Automapper这样的东西.

我的问题是,如果你需要在视图中显示模型的所有属性,是否值得创建一个ViewModel?

如果Model和ViewModel需要相同,那么创建ViewModel会在应用程序中创建一些安全性或好处,或者我们只是增加了不必要的复杂性?

c# asp.net-mvc asp.net-mvc-viewmodel asp.net-mvc-5

7
推荐指数
3
解决办法
2264
查看次数