双输入MVC扩展 [英] Double input mvc extension

查看:147
本文介绍了双输入MVC扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这里,我试图与一个扩展的双输入框<​​/ STRONG>

返回模型的属性都为空,
它们不是正确地结合或另外还有一个问题在这里,
请帮我在写这篇延伸和利用它。
我需要我的code期间使用十万吧。

 公共静态类DoubleBoxHelper
{
    公共静态MvcHtmlString DoubleBoxFor&LT;的TModel,TProperty&GT;(
        这与的HtmlHelper LT;的TModel&GT;的HtmlHelper,
        // INT ID,
        防爆pression&LT;&Func键LT;的TModel,TProperty&GT;&GT;前pression)
    {
        VAR建设者=新的StringBuilder();
        VAR元= ModelMetadata.FromLambdaEx pression(如pression,htmlHelper.ViewData);
        VAR模型= metadata.Model为DoubleNumber;
        变量名称=前pressionHelper.GetEx pressionText(如pression);
        VAR全名= htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(名);
        VAR fieldId = TagBuilder.CreateSanitizedId(全名);        //第一个文本框
        VAR tagInputLeft =新TagBuilder(输入);
        tagInputLeft.Attributes.Add(名,全名);
        tagInputLeft.Attributes.Add(ID,fieldId + 1);
        tagInputLeft.Attributes.Add(类型,文本);
        tagInputLeft.Attributes.Add(价值,model.Num1 == NULL:model.Num1.ToString());        //第二个文本框
        VAR tagInputRight =新TagBuilder(输入);
        tagInputRight.Attributes.Add(名,全名);
        tagInputRight.Attributes.Add(ID,fieldId + 2);
        tagInputRight.Attributes.Add(类型,文本);
        tagInputRight.Attributes.Add(价值,model.Num2 == NULL:model.Num2.ToString());        builder.Append(tagInputLeft.ToString(TagRenderMode.SelfClosing));
        builder.Append(tagInputLeft.ToString(TagRenderMode.SelfClosing));
        返回新MvcHtmlString(builder.ToString());
    }
}

Model类

 公共类DoubleNumber
{
    公众诠释NUM1 {搞定;组; } //尝试字符串,但他们又都为空
    公众诠释NUM2 {搞定;组; }
}

在这里是控制器 - 邮政行动,我们需要输入的数字

  [HttpPost]
公众的ActionResult指数(DoubleNumber G)
{
    INT iNum1 = g.Num1; // int或字符串不要紧,它不能获得进入(修改)模型
    INT iNum2 = g.Num2;
    VAR VM = ViewModelOf(G);
    返回查看(VM);
}


解决方案

您很可能有一个更容易的时间只用一个编辑器模板:

视图\\共享\\ EditorTemplates \\ DoubleNumber.cshtml

  @model DoubleNumber
@ Html.TextBoxFor(M = GT; m.Num1)
@ Html.TextBoxFor(M = GT; m.Num2)

然后,在你的看法:

  @ Html.EditorForModel()

或者,如果你已经有了键入 DoubleNumber 的一个属性上的视图模型:

  @ Html.EditorFor(M = GT; m.MyDoubleNumberProperty)

Here I was trying to make an extension with double input boxes

the returned model's properties are null, They are not correctly bound or there is another issue here, please help me on writing this extension and make use of it. I need to use thousands of it during my code.

public static class DoubleBoxHelper
{
    public static MvcHtmlString DoubleBoxFor<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper,
        //int id, 
        Expression<Func<TModel, TProperty>> expression)
    {
        var builder = new StringBuilder();
        var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        var model = metadata.Model as DoubleNumber;
        var name = ExpressionHelper.GetExpressionText(expression);
        var fullName = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
        var fieldId = TagBuilder.CreateSanitizedId(fullName);

        // 1st TextBox
        var tagInputLeft = new TagBuilder("input");
        tagInputLeft.Attributes.Add("name", fullName);
        tagInputLeft.Attributes.Add("id", fieldId + 1);
        tagInputLeft.Attributes.Add("type", "text");
        tagInputLeft.Attributes.Add("value", model.Num1 == null ? "" : model.Num1.ToString());

        // 2nd TextBox
        var tagInputRight = new TagBuilder("input");
        tagInputRight.Attributes.Add("name", fullName);
        tagInputRight.Attributes.Add("id", fieldId + 2);
        tagInputRight.Attributes.Add("type", "text");
        tagInputRight.Attributes.Add("value", model.Num2 == null ? "" : model.Num2.ToString());

        builder.Append(tagInputLeft.ToString(TagRenderMode.SelfClosing));
        builder.Append(tagInputLeft.ToString(TagRenderMode.SelfClosing));
        return new MvcHtmlString(builder.ToString());
    }
}

The Model class

public class DoubleNumber
{
    public int Num1 { get; set; } // tried strings but again they are null
    public int Num2 { get; set; }
}

And Here is the controller -Post action which we need the entered numbers

[HttpPost]
public ActionResult Index(DoubleNumber g)
{
    int iNum1 = g.Num1; // int or string doesn't matter, it couldn't get the entered(modified) model
    int iNum2 = g.Num2;
    var vm = ViewModelOf(g);
    return View(vm);
}

解决方案

You'd probably have an easier time just using an editor template:

Views\Shared\EditorTemplates\DoubleNumber.cshtml

@model DoubleNumber
@Html.TextBoxFor(m => m.Num1)
@Html.TextBoxFor(m => m.Num2)

Then, in your view:

@Html.EditorForModel()

Or, if you've got a property of type DoubleNumber on a view model:

@Html.EditorFor(m => m.MyDoubleNumberProperty)

这篇关于双输入MVC扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆