【问题标题】:Double input mvc extension双输入mvc扩展
【发布时间】:2014-05-19 07:15:12
【问题描述】:

这里我试图用双输入框

做一个扩展

返回模型的属性为空, 它们没有正确绑定或者这里有另一个问题, 请帮助我编写此扩展并使用它。 我需要在我的代码中使用数千个。

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());
    }
}

模型类

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

这是控制器 - 我们需要输入数字的发布操作

[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);
}

【问题讨论】:

  • 如果有人还可以提到我如何在我的字符串生成器中使用类似的东西:“htmlHelper.TextBoxFor(expression”),我可以通过它来定位我的模型所需的属性,这可能是一个很大的帮助.

标签: c# asp.net-mvc asp.net-mvc-5 html-helper


【解决方案1】:

使用编辑器模板可能会更轻松:

Views\Shared\EditorTemplates\DoubleNumber.cshtml

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

那么,在你看来:

@Html.EditorForModel()

或者,如果您在视图模型上有 DoubleNumber 类型的属性:

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

【讨论】:

  • 没关系,我认为 +1,它可能类似于 PartialView 方法,但是如果你正在制作一个可重用的库并且你试图将一些类似的逻辑作为控件,我也我正在尝试在这里找到我错过的东西,请考虑另一种方式,谢谢
猜你喜欢
  • 2016-07-17
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
相关资源
最近更新 更多