双输入MVC扩展

问题描述:

在这里,我试图让与双输入框双输入MVC扩展

返回模型的属性是空的扩展, 他们没有正确绑定或这里还有另外一个问题, 请帮我写这个扩展名并利用它。 我需要在我的代码中使用它数千次。

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

Model类

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); 
} 
+0

如果任何人还可以提及如何使用类似这样的东西:“htmlHelper.TextBoxFor(表达式”在我的字符串生成器中,我可以通过我的目标我的模型的所需属性这可能是一个很大的帮助。 – LastBye

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

浏览\共享\ EditorTemplates \ DoubleNumber.cshtml

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

然后,在你的看法:

@Html.EditorForModel() 

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

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

这没什么,我认为+1,它可能类似于PartialView方法,但是如果你正在制作一个可重用的库,并且你正在尝试将一些类似的逻辑作为控件,那么我该如何找到我错过了这里,请考虑另一种方式,谢谢 – LastBye