2014-05-19 51 views
1

在這裏,我試圖讓與雙輸入框雙輸入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

回答

2

你可能有一個更容易的時間只用編輯模板:

瀏覽\共享\ 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