2014-11-04 80 views
0

我喜欢第三方文件上传(Backload)上传图像& JavaScript获取上传的图像名称。我想将图像名称列表绑定到我的MVC模型中。我的要求是在提交表单时动态地创建隐藏的输入。我知道,我必须在循环中使用顺序绑定。任何人都可以帮助我如何使用正确的语法来实现这一点。 它应该是类似的东西这个添加隐藏的输入字段并将它们绑定到模型

for (int i= 0; i< noOfImages; i++) 
{ 
    <input type="hidden" name="Model.Images[i].Name" value=file.name /> 
} 

(请注意,我不希望Ajax解决方案,这和请告诉我的代码我Razor视图使用或者是否有其他更好的解决方案,请让我知道)。谢谢。

public class ItemModel 
{ 
    public int ID { get; set; } 
    public string Name { get; set; }  
    public virtual ICollection<ImageModel> Images { get; set; } 
} 

public class ImageModel 
{ 
    public int ID { get; set; } 
    public string Name { get; set; }  
    public virtual ItemModel Items { get; set; } 
} 

我用下面的JavaScript代码来获得上传的文件名的值,当我点击提交#ItemCreate形式的按钮来创建隐藏的输入。

$('#ImageUplodedtable input[name="ImageName"]').each(function() { 
    $('#ItemCreateForm').append('<input name="ImageName" value="' + this.value + '"/>'); 

我将下面的部分添加到我的问题中。我错过了单引号和两个加号['+ i +'],现在它工作正常。

$('#ImageUplodedtable input[name="ImageName"]').each(function() { 
    for (int i= 0; i< noOfImages; i++) 
{ 
    <input type="hidden" name="Images[+'i'+].Name" value="' + this.value + '" /> 
} 

我不能在这里使用.each()for循环。任何人都可以提供一种方法来获取Uploded表中的所有图像名称?

回答

0

你已经在顶部的for循环中做了正确的操作,但是一旦你到达JavaScript部分,就会让名称变得糟糕。保持输入的名称与第一个for循环的样式相同,并且您会没事的,即Images[N].Name其中N是集合中项目的索引。

+0

非常感谢您的快速回复。 (var i = 0; i <1; i ++){('#AddItem')。append(){('#ImageInputName [ ''); } 我试过这个,但是对于循环的递增值(i)无法正常工作。 name =“Images [0] .Name />没有for循环,你可以让我知道为什么递增值在这里不起作用 – user3627847 2014-11-04 16:49:56

+0

因为'i'开始为0,并且你的条件必须小于1 。因此,for循环运行一次,其中'i'然后增加到1并且不再满足条件 – 2014-11-04 16:53:04

+0

对不起,我没有在我最后的评论中清楚地解释我的问题 我手动给name =“Images [ 0] .Name作为输入的名称(无for循环)检查模型绑定是否正常工作。它工作正常。 但是,当我使用FOR循环它不工作。假设我有一个图像名称,并且当for循环运行一次时,它应该创建,但是我的值仍然是i ... name = Images [i] .name。这是我的问题。 (可以使用.each()for循环吗?) – user3627847 2014-11-04 17:18:01

0

我终于决定用这个函数来创建隐藏文件。我希望这可以帮助像我这样的未来新手。

function CretaeHiddenFields(){ 
var uploadedImages = $('#ImageUplodedtable input[name="ImageName"]') ; 
var divArea = $(#CreateInputDiv); 
    for (var i = 0; i < uploadedImages .length; i++) { 
     var imageName = document.createElement("input");   
     imageName.type = "hidden"; 
     imageName.name = "Images[" + i + "].Name"; 
     imageName.value = uploadedImage[i].value; // value of #ImageUplodedtable ImageNameinputs 
     formCreteItm.append(imageName); 

    } 

}